Entrar
Últimos assuntos
» player não consegue andarpor lovn7 Qui 21 Nov 2024, 13:33
» É possível fazer istó no game maker
por William Lima Qui 21 Nov 2024, 10:56
» Rio Rise - novo launcher do Gta San Andreas SAMP Brasil
por Lua Sáb 16 Nov 2024, 20:22
» (Resolvido) Cenario longo x Texture Pages
por josuedemoraes Sáb 16 Nov 2024, 15:31
» Kids' band
por Adilson Lucindo Santos Sex 15 Nov 2024, 12:23
» (RESOLVIDO) Engasgos-Troca de Sprites/animações
por josuedemoraes Ter 12 Nov 2024, 01:49
» Block Room - DEMO
por Joton Qua 06 Nov 2024, 22:58
» Game Infinito vertical (subindo)
por macmilam Sáb 26 Out 2024, 12:36
» Retorno da GMBR!!!
por Dancity Ter 22 Out 2024, 16:36
» Máquina de estados
por aminaro Qui 10 Out 2024, 13:33
» como faço pra um objeto colidir com o outro e diminuir a vida do player ?
por josuedemoraes Qui 03 Out 2024, 16:51
» RESOLVIDO: Colisão com objetos moveis
por josuedemoraes Qua 02 Out 2024, 20:28
» Crypt of the Blood Moon
por divin sphere Qua 11 Set 2024, 18:18
» como fazer um objeto seguir?
por divin sphere Dom 18 Ago 2024, 18:08
» Procuro de alguém para Modelar/Texturizar/Animar objetos 3D
por un00brn Dom 11 Ago 2024, 11:10
» Destruição de cenário (estilo DD Tank)
por CoronelZeg Sex 09 Ago 2024, 17:16
» RESOLVIDO-Como destruir uma instancia especifica de um objeto
por josuedemoraes Ter 23 Jul 2024, 00:40
» Automatizar a coleta de id
por GabrielXavier Seg 22 Jul 2024, 18:01
» Preciso de ajuda para concluir um pequeno projeto
por lmoura Qui 27 Jun 2024, 15:45
» ANGULO ACOMPANHAR O OBJETO
por Klinton Rodrigues Qui 27 Jun 2024, 08:34
» Musica reinicia quando sala reinicia
por GabrielXavier Ter 18 Jun 2024, 07:28
» como fazer uma copia de gd
por generico_cube Sex 14 Jun 2024, 15:48
» Square Adventure
por guilherme551 Ter 11 Jun 2024, 09:54
» como posso definir limite de uma variavel
por GabrielXavier Sex 07 Jun 2024, 14:14
» [Resolvido] Dúvida, colisão única de objeto
por vdm842 Sex 24 maio 2024, 09:50
Problema com Pulo Duplo
3 participantes
Página 1 de 1
Problema com Pulo Duplo
E ai tudo blz?
Então eu programei um sistema de pulo duplo mas ele tem um problema que não tem o limite apenas dos dois pulos que eu queria fico apertando e ele continua a pular mais de 2 x
if !place_meeting(x,y+1,obj_block) {
grav = .5;
vspd += grav;
}
else {
grav = 0;
vspd = 0;
if keyboard_check_pressed(vk_space) {
vspd = maxvspd;
qtd_pulos = 1;
}
}
if place_free(x,y) and keyboard_check_pressed(vk_space) {
vspd = -12;
pulo2 = true;
qtd_pulos = 2;
}
if keyboard_check_released(vk_space) { vspd *= .5; };
Esse é o código que to usando se puderem me ajudar agradeço ;w;
Então eu programei um sistema de pulo duplo mas ele tem um problema que não tem o limite apenas dos dois pulos que eu queria fico apertando e ele continua a pular mais de 2 x
if !place_meeting(x,y+1,obj_block) {
grav = .5;
vspd += grav;
}
else {
grav = 0;
vspd = 0;
if keyboard_check_pressed(vk_space) {
vspd = maxvspd;
qtd_pulos = 1;
}
}
if place_free(x,y) and keyboard_check_pressed(vk_space) {
vspd = -12;
pulo2 = true;
qtd_pulos = 2;
}
if keyboard_check_released(vk_space) { vspd *= .5; };
Esse é o código que to usando se puderem me ajudar agradeço ;w;
Jeffin81- Games Ranking :
Data de inscrição : 16/10/2020
Reputação : 0
Número de Mensagens : 4
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: Problema com Pulo Duplo
Você não verifica quantos pulos já foram dados. Em qualquer situação, pelo seu código, apertar espaço vai definir vspd, independente do valor de "qtd_pulos".
TALVEZ se você substituir
if place_free(x,y) and keyboard_check_pressed(vk_space) {
por
if place_free(x,y) and keyboard_check_pressed(vk_space) and qtd_pulos < 2{
resolva.
Se não resolver, o raciocício é nessa linha: verificar uma condição antes de aceitar o segundo pulo.
MAS também não vi a parte em que qtd_pulos volta a ser 1, permitindo o pulo duplo novamente. Acho que no primeiro pulo, isso já vai estar resolvido, mas pode ser que não. Teste e conte.
TALVEZ se você substituir
if place_free(x,y) and keyboard_check_pressed(vk_space) {
por
if place_free(x,y) and keyboard_check_pressed(vk_space) and qtd_pulos < 2{
resolva.
Se não resolver, o raciocício é nessa linha: verificar uma condição antes de aceitar o segundo pulo.
MAS também não vi a parte em que qtd_pulos volta a ser 1, permitindo o pulo duplo novamente. Acho que no primeiro pulo, isso já vai estar resolvido, mas pode ser que não. Teste e conte.
saim- Games Ranking :
Notas recebidas : C-D-A-B
Data de inscrição : 14/01/2011
Reputação : 136
Número de Mensagens : 3033
Prêmios :
x 1 x 6 x 0
x 1 x 0 x 3
x 0 x 0 x 0
polosam gosta desta mensagem
Re: Problema com Pulo Duplo
Então cara quando eu mudei ele já não conseguia pular 2 vezes, mas vc disse que não viu nenhuma condição pra que o pulo volte a ser 1 depois do segundo pulo
Se puder me ajudar novamente agradeço
Se puder me ajudar novamente agradeço
Jeffin81- Games Ranking :
Data de inscrição : 16/10/2020
Reputação : 0
Número de Mensagens : 4
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: Problema com Pulo Duplo
Pra reiniciar a variável de pulos duplos você pode tentar fazer algo do tipo do step:
if place_meeting(x,y+1,obj_chao) qtd_pulos=0
que seria algo tipo "Se eu estiver colidindo com um chão no meu pé, reinicia a váriavel de pulos"
e teste mudando esse valor +1 pra ver se dá certo dependendo da mask, pode precisar de um +2,+3 e assim por diante
if place_meeting(x,y+1,obj_chao) qtd_pulos=0
que seria algo tipo "Se eu estiver colidindo com um chão no meu pé, reinicia a váriavel de pulos"
e teste mudando esse valor +1 pra ver se dá certo dependendo da mask, pode precisar de um +2,+3 e assim por diante
divin sphere- Games Ranking :
Notas recebidas : D
Data de inscrição : 31/03/2012
Reputação : 22
Número de Mensagens : 116
Prêmios :
x 0 x 0 x 0
x 1 x 0 x 0
x 0 x 0 x 0
Plataformas :- Game Maker 8.0 ou 8.1
- Game Maker Studio 2.0
saim gosta desta mensagem
Re: Problema com Pulo Duplo
Eae mano cara fiz como vc sugeriu e ele continua podendo pular o quanto quiser ;--; não sei se preciso reprogramar pra fazer mas tá dificil
Mas muito obrigado por estar tentando me ajudar
Mas muito obrigado por estar tentando me ajudar
Jeffin81- Games Ranking :
Data de inscrição : 16/10/2020
Reputação : 0
Número de Mensagens : 4
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: Problema com Pulo Duplo
Velho, vou te pedir pra mostrar o código toda vez que mudar, mesmo que seja só uma coisinha. Senão, a gente fica dando ideia em cima de código ultrapassado. Se achar que está ficando um texto muito grande, você pode colocar o texto num spoiler.
Outra coisa: não tenha medo de comentar seu código. Facilita até pra você próprio entender o que está fazendo.
Mas vamos lá, com o primeiro código mesmo.
Então independente da situação que você estiver, ao apertar espaço você vai:
- definir "vspd" como -12 (mesmo estando no chão, vspd vai ser definido como maxvspd e depois, antes mesmo de terminar o código, será redefinido como -12)
- pulo2 será true (e não há como voltar a ser false, nesse código)
- qtd_pulos será 2.
O que você precisa é algo na linha do que o divin sphere disse:
- estabelecer um contador de pulos (qtd_pulos está ótimo)
- zerar esse contador quando tocar no chão
- colocar apenas um código pra pulo, que não dependa da situação do objeto (se ele está no chão ou no ar), mas que dependa do valor do contador de pulos.
O que vai acontecer: enquanto você estiver em contato com o chão, o contador será zero. Assim que deixar de ter contato, esse valor passa a ser possível de mudar.
O legal é que no step seguinte ao que você definir vspd pra um valor diferente de zero, já não vai mais haver contato com o chão, então qtd_pulos não volta a zero.
Aí, quando chegar no valor máximo de pulos (2 ou mais, depende de você), a condição pra pular não vai mais estar satisfeita, mesmo você apertando espaço. Só volta a estar satisfeita ao chegar ao chão (e você apertar espaço, claro).
Outra coisa: não tenha medo de comentar seu código. Facilita até pra você próprio entender o que está fazendo.
Mas vamos lá, com o primeiro código mesmo.
- Código:
// se estiver no ar, aplicar gravidade
if !place_meeting(x,y+1,obj_block) {
grav = .5;
vspd += grav;
}
else { // se não estiver no ar, zerar gravidade e permitir pulos
grav = 0;
vspd = 0;
if keyboard_check_pressed(vk_space) { //se apertou espaço, pular
vspd = maxvspd; //aplica velocidade vertical
qtd_pulos = 1; // inicia o contador de pulos
}
}
// estando no ar ou não, aplicar o código abaixo:
if place_free(x,y) and keyboard_check_pressed(vk_space) { //se não há colisão e apertou o espaço
vspd = -12; //aplica velocidade vertical
pulo2 = true; // define essa veriável como true
qtd_pulos = 2; //define essa variável como 2
}
// estando no ar ou não, aplicar o código abaixo:
if keyboard_check_released(vk_space) { vspd *= .5; }; // se soltou o espaço, multiplica a vspd por 0.5
Então independente da situação que você estiver, ao apertar espaço você vai:
- definir "vspd" como -12 (mesmo estando no chão, vspd vai ser definido como maxvspd e depois, antes mesmo de terminar o código, será redefinido como -12)
- pulo2 será true (e não há como voltar a ser false, nesse código)
- qtd_pulos será 2.
O que você precisa é algo na linha do que o divin sphere disse:
- estabelecer um contador de pulos (qtd_pulos está ótimo)
- zerar esse contador quando tocar no chão
- colocar apenas um código pra pulo, que não dependa da situação do objeto (se ele está no chão ou no ar), mas que dependa do valor do contador de pulos.
O que vai acontecer: enquanto você estiver em contato com o chão, o contador será zero. Assim que deixar de ter contato, esse valor passa a ser possível de mudar.
O legal é que no step seguinte ao que você definir vspd pra um valor diferente de zero, já não vai mais haver contato com o chão, então qtd_pulos não volta a zero.
Aí, quando chegar no valor máximo de pulos (2 ou mais, depende de você), a condição pra pular não vai mais estar satisfeita, mesmo você apertando espaço. Só volta a estar satisfeita ao chegar ao chão (e você apertar espaço, claro).
saim- Games Ranking :
Notas recebidas : C-D-A-B
Data de inscrição : 14/01/2011
Reputação : 136
Número de Mensagens : 3033
Prêmios :
x 1 x 6 x 0
x 1 x 0 x 3
x 0 x 0 x 0
Re: Problema com Pulo Duplo
Eae mano
Cara então eu fui tentando programar sozinho lendo e seguindo a lógica vou mostrar o código pra vcs verem oq eu errei na lógica pq mesmo eu tentando não consegui :/
Depois de eu testar os códigos de todos eu voltava ao antigo por isso que agora tá igual ao que tu me mandou não sei oq errei na lógica tipo vc disse que tenho que criar uma linha que diga que quando ele tocar o chao a qtd_pulos vira 0 ai eu coloquei assim e não deu o personagem para no ar agora
Obrigado a todos que estão tentando me ajudar sou iniciante ainda mas to disposto a aprender mas sério valeu mesmo a todos
Cara então eu fui tentando programar sozinho lendo e seguindo a lógica vou mostrar o código pra vcs verem oq eu errei na lógica pq mesmo eu tentando não consegui :/
- Código:
if !place_meeting(x,y+1,obj_block) {
grav = .5;
vspd += grav;
qtd_pulos = 0;
}
else {
grav = 0;
vspd = 0;
if keyboard_check_pressed(vk_space) {
vspd = maxvspd;
qtd_pulos = 1;
pulo2 = false;
}
}
if place_free(x,y+1)or place_meeting(x,y+1,obj_block) and keyboard_check_pressed(vk_space) {
vspd = -12
qtd_pulos = 2;
pulo2 = true;
}else {
vspd = 0;
qtd_pulos = 0;
pulo2 = false;
}
if keyboard_check_released(vk_space) { vspd *= .5; };
Depois de eu testar os códigos de todos eu voltava ao antigo por isso que agora tá igual ao que tu me mandou não sei oq errei na lógica tipo vc disse que tenho que criar uma linha que diga que quando ele tocar o chao a qtd_pulos vira 0 ai eu coloquei assim e não deu o personagem para no ar agora
Obrigado a todos que estão tentando me ajudar sou iniciante ainda mas to disposto a aprender mas sério valeu mesmo a todos
Jeffin81- Games Ranking :
Data de inscrição : 16/10/2020
Reputação : 0
Número de Mensagens : 4
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: Problema com Pulo Duplo
Ok, vou tentar te mostrar o que eu considero erros e porque considero assim.
Erro2: Você está verificando se apertou espaço estando no chão. Se estar no chão fosse condição para pular, estaria ok, mas não é. O plano é poder pular estando no chão ou no caso do pulo duplo. Portanto, a verificação do botão (espaço) não deve ser feita dentro da condição de estar no chão; deve ser feita em qualquer situação.
Erro3: Eu leio "place_free(x,y+1)or place_meeting(x,y+1,obj_block)" como "estando no chão ou não estando no chão" ou "em qualquer situação". Ora, se é em qualquer situação, não há necessidade de verificação nenhuma, bastando olhar se o botão (espaço) foi apertado.
Nesse caso, eu substituiria a linha toda por
Erro3, parte2: como o "if" acaba verificando só se o espaço foi apertado, o "else" vai ser verdadeiro sempre que você não tiver acabado de apertar o espaço. Em outras palavras, quase o tempo todo.
Erro4: a idéia é usar "qtd_pulos" como um contador. O único valor a que um contador deve ser definido é zero (ou um valor máximo, no caso de uma contagem regressiva). Assim, quando a gente for pular, o valor deve CRESCER EM UMA UNIDADE, não ser definido como 2.
Erro5: Não use duas variáveis para verificar a mesma coisa. Se você só quer verificar se já pulou duas vezes, use qtd_pulos.
Uma mesma função até pode precisar de diversas variáveis, mas no caso, a gente só quer saber quantos pulos já deu. Isso é um número só.
Erro6 (não está no código): Você está tentando corrigir um problema de código com mais código. Nada contra acrescentar código pra melhorar uma função. Mas um erro não vai ser corrigido com mais código (pode ser corrigido com um código NOVO, mas só acrescentar coisas, não).
Seu código deveria ser simples:
Agora, a pergunta: Pra que você está reduzindo a velocidade ao soltar o espaço? Não é um erro, mas não vejo a utilidade disso.
- Código:
if !place_meeting(x,y+1,obj_block) { // se não está no chão
grav = .5;
vspd += grav;
qtd_pulos = 0; // erro#1
}
else { // se está no chão
grav = 0;
vspd = 0;
if keyboard_check_pressed(vk_space) { // erro #2
vspd = maxvspd;
qtd_pulos = 1;
pulo2 = false;
}
}
if place_free(x,y+1)or place_meeting(x,y+1,obj_block) and keyboard_check_pressed(vk_space) { // erro#3
vspd = -12
qtd_pulos = 2; // erro#4
pulo2 = true; // erro#5
}else { //erro#3, parte2
vspd = 0;
qtd_pulos = 0;
pulo2 = false; // erro#5
}
if keyboard_check_released(vk_space) { vspd *= .5; } //pergunta#1;
Erro2: Você está verificando se apertou espaço estando no chão. Se estar no chão fosse condição para pular, estaria ok, mas não é. O plano é poder pular estando no chão ou no caso do pulo duplo. Portanto, a verificação do botão (espaço) não deve ser feita dentro da condição de estar no chão; deve ser feita em qualquer situação.
Erro3: Eu leio "place_free(x,y+1)or place_meeting(x,y+1,obj_block)" como "estando no chão ou não estando no chão" ou "em qualquer situação". Ora, se é em qualquer situação, não há necessidade de verificação nenhuma, bastando olhar se o botão (espaço) foi apertado.
Nesse caso, eu substituiria a linha toda por
- Código:
if keyboard_check_pressed(vk_space) {
Erro3, parte2: como o "if" acaba verificando só se o espaço foi apertado, o "else" vai ser verdadeiro sempre que você não tiver acabado de apertar o espaço. Em outras palavras, quase o tempo todo.
Erro4: a idéia é usar "qtd_pulos" como um contador. O único valor a que um contador deve ser definido é zero (ou um valor máximo, no caso de uma contagem regressiva). Assim, quando a gente for pular, o valor deve CRESCER EM UMA UNIDADE, não ser definido como 2.
- Código:
qtd_pulos = qtd_pulos + 1;
Erro5: Não use duas variáveis para verificar a mesma coisa. Se você só quer verificar se já pulou duas vezes, use qtd_pulos.
Uma mesma função até pode precisar de diversas variáveis, mas no caso, a gente só quer saber quantos pulos já deu. Isso é um número só.
Erro6 (não está no código): Você está tentando corrigir um problema de código com mais código. Nada contra acrescentar código pra melhorar uma função. Mas um erro não vai ser corrigido com mais código (pode ser corrigido com um código NOVO, mas só acrescentar coisas, não).
Seu código deveria ser simples:
- Código:
se (está_no_chão){
qtd_pulos = 0; // zera o contador
não cai mais; // grav, vspd, etc
}
else {cai sim;} // grav, vspd, etc
//independente de estar no chão ou não
se (apertou_espaço and qtd_pulos < valor_máximo_de_pulos){
qtd_pulos += 1; //incrementa o contador
sai_do_chão_definindo_vspd; // assim que sair do chão, qtd_pulos pára de voltar a zero
}
Agora, a pergunta: Pra que você está reduzindo a velocidade ao soltar o espaço? Não é um erro, mas não vejo a utilidade disso.
saim- Games Ranking :
Notas recebidas : C-D-A-B
Data de inscrição : 14/01/2011
Reputação : 136
Número de Mensagens : 3033
Prêmios :
x 1 x 6 x 0
x 1 x 0 x 3
x 0 x 0 x 0
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos