GMBR
Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.
Entrar

Esqueci-me da senha

Últimos assuntos
» Colisões não funcionando
por RastaMaan Sex 26 Abr 2024, 19:49

» Como ajustar velocidade de cada frame da animação no game maker
por pequetux Sex 26 Abr 2024, 16:45

» Preciso de ajuda
por AftonDuGrau Dom 21 Abr 2024, 20:18

» Como faz o evento drawn GUI, não se repetir?
por aminaro Sex 19 Abr 2024, 20:30

» PROBLEMAS COM FÍSICAS DE ÁGUA
por aminaro Ter 16 Abr 2024, 10:07

» Retorno da GMBR!!!
por Ralphed Sex 12 Abr 2024, 22:45

» JOGADOR PARANDO NO AR QUANDO ATACA
por aminaro Qua 10 Abr 2024, 13:51

» Problemas com texto interativo
por Kaaru72 Dom 07 Abr 2024, 11:31

» Erro escondido e indecifrável
por dev_gabize.azv Qui 04 Abr 2024, 10:11

» Mudar cor de apenas uma palavra
por Ralphed Sáb 30 Mar 2024, 00:39

» Procuro Programador de game maker
por Wou Sex 15 Mar 2024, 10:27

» Mod APK
por gamerainha Qua 13 Mar 2024, 06:30

» Aceito pedidos de sprites (Com exemplos meus)
por Sevilha Qua 28 Fev 2024, 12:17

» Inventário simples
por Isquilo_Roedor Qui 22 Fev 2024, 15:18

» Problemas na programaçnao de inimigo [jogo DOOM LIKE]
por Black Mirror Dom 11 Fev 2024, 13:34

» ANDROID MULTI TOUCH
por DiegoBr Dom 04 Fev 2024, 12:13

» Servidor de Discord do fórum?
por Lighter Sáb 27 Jan 2024, 17:18

» Save e Load Json
por Klinton Rodrigues Qui 25 Jan 2024, 11:12

» Colisão com mais de um objeto
por aminaro Seg 22 Jan 2024, 15:02

» Oi sou novo aqui
por Thiago Silveira Alexandre Sáb 20 Jan 2024, 20:55

» Como acessar conteudo comprado no marketplace
por macmilam Sex 19 Jan 2024, 07:42

» Devlogs em vídeos do Block Room
por Joton Seg 15 Jan 2024, 16:56

» Alguém aqui já ganha dinheiro com seus games?
por Joton Seg 15 Jan 2024, 16:49

» ACERVO GMBR MAGAZINE
por Joton Qui 11 Jan 2024, 19:21

» como aumentar o obj sem aumentar a colisão??
por GabrielXavier Qua 10 Jan 2024, 07:21


Problema com Pulo Duplo

3 participantes

Ir para baixo

Problema com Pulo Duplo Empty Problema com Pulo Duplo

Mensagem por Jeffin81 Seg 19 Out 2020, 13:04

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;
Jeffin81
Jeffin81

Games Ranking : Sem avaliações

Data de inscrição : 16/10/2020
Reputação : 0
Número de Mensagens : 4
Prêmios : Problema com Pulo Duplo Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Ir para o topo Ir para baixo

Problema com Pulo Duplo Empty Re: Problema com Pulo Duplo

Mensagem por saim Seg 19 Out 2020, 17:23

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.
saim
saim

Games Ranking : Nota B

Notas recebidas : C-D-A-B
Data de inscrição : 14/01/2011
Reputação : 136
Número de Mensagens : 3033
Prêmios : Problema com Pulo Duplo Empty

Medalhas x 1 Tutoriais x 6 Moedas x 0

Ouro x 1 Prata x 0 Bronze x 3

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

polosam gosta desta mensagem

Ir para o topo Ir para baixo

Problema com Pulo Duplo Empty Re: Problema com Pulo Duplo

Mensagem por Jeffin81 Ter 20 Out 2020, 09:23

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
Jeffin81
Jeffin81

Games Ranking : Sem avaliações

Data de inscrição : 16/10/2020
Reputação : 0
Número de Mensagens : 4
Prêmios : Problema com Pulo Duplo Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Ir para o topo Ir para baixo

Problema com Pulo Duplo Empty Re: Problema com Pulo Duplo

Mensagem por divin sphere Ter 20 Out 2020, 10:04

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
divin sphere
divin sphere

Games Ranking : Nota D

Notas recebidas : D
Data de inscrição : 31/03/2012
Reputação : 22
Número de Mensagens : 114
Prêmios : Problema com Pulo Duplo Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 1 Prata x 0 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Plataformas :
  • Game Maker 8.0 ou 8.1
  • Game Maker Studio 2.0


saim gosta desta mensagem

Ir para o topo Ir para baixo

Problema com Pulo Duplo Empty Re: Problema com Pulo Duplo

Mensagem por Jeffin81 Ter 20 Out 2020, 12:14

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 Happy Happy
Jeffin81
Jeffin81

Games Ranking : Sem avaliações

Data de inscrição : 16/10/2020
Reputação : 0
Número de Mensagens : 4
Prêmios : Problema com Pulo Duplo Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Ir para o topo Ir para baixo

Problema com Pulo Duplo Empty Re: Problema com Pulo Duplo

Mensagem por saim Ter 20 Out 2020, 18:43

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.
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
Note que a partir do segundo bloco de código, se não houver colisão, TUDO vai acontecer. E estamos falando de colisão não posição do objeto, não um pixel abaixo dele (como costuma ser usado pra verificar se ele está no chão).
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
saim

Games Ranking : Nota B

Notas recebidas : C-D-A-B
Data de inscrição : 14/01/2011
Reputação : 136
Número de Mensagens : 3033
Prêmios : Problema com Pulo Duplo Empty

Medalhas x 1 Tutoriais x 6 Moedas x 0

Ouro x 1 Prata x 0 Bronze x 3

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Ir para o topo Ir para baixo

Problema com Pulo Duplo Empty Re: Problema com Pulo Duplo

Mensagem por Jeffin81 Qua 21 Out 2020, 08:03

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 :/
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 Happy mas sério valeu mesmo a todos
Jeffin81
Jeffin81

Games Ranking : Sem avaliações

Data de inscrição : 16/10/2020
Reputação : 0
Número de Mensagens : 4
Prêmios : Problema com Pulo Duplo Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Ir para o topo Ir para baixo

Problema com Pulo Duplo Empty Re: Problema com Pulo Duplo

Mensagem por saim Qua 21 Out 2020, 09:33

Ok, vou tentar te mostrar o que eu considero erros e porque considero assim.
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;
Erro1: A idéia era zerar o valor de qtd_pulos quando estiver no chão. No caso, está zerando SEMPRE que estiver no ar

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) {
(Mas daqui a pouco eu vou acrescentar mais uma coisinha nisso aqui.)

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
saim

Games Ranking : Nota B

Notas recebidas : C-D-A-B
Data de inscrição : 14/01/2011
Reputação : 136
Número de Mensagens : 3033
Prêmios : Problema com Pulo Duplo Empty

Medalhas x 1 Tutoriais x 6 Moedas x 0

Ouro x 1 Prata x 0 Bronze x 3

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Ir para o topo Ir para baixo

Problema com Pulo Duplo Empty Re: Problema com Pulo Duplo

Mensagem por Conteúdo patrocinado


Conteúdo patrocinado


Ir para o topo Ir para baixo

Ir para o topo

- Tópicos semelhantes

 
Permissões neste sub-fórum
Não podes responder a tópicos