Problema chato com rampas [ainda não foi resolvido :/]

Ver o tópico anterior Ver o tópico seguinte Ir em baixo

Problema chato com rampas [ainda não foi resolvido :/]

Mensagem por Rhino em Sex 07 Maio 2010, 20:59

Estou fazendo um jogo de plataforma, no estilo do Mario. Porém, o que acontece é que, ao colidir com as rampas, ele sobe, tudo bonitinho (já consegui fazer e está perfeito, pelo menos eu acho), só que, algumas vezes quando ele está descendo/subindo e volta a andar num chão plano, ele simplesmente para de pular. D:
Outros dois problema que estou tendo é que, na rampa, ele não consegue pular e, quando sobe/desce, o sprite fica como o dele pulando e não como andando pra direita/esquerda.

Estou usando este código no End Step pra ele subir a rampa (uso um parent pra dela, marcada como sólida e as que estão interligadas não-sólidas):

Código:
while (place_meeting(x,y,obj_rampa_parent))
{
y-=1
}

Colisão do jogador com o parent da rampa:
Código:
if vspeed>0 and !place_free(x,y+vspeed)
{
move_contact_solid(direction,10)
}
vspeed=0


Última edição por Rhino em Qui 13 Maio 2010, 13:18, editado 1 vez(es)

Rhino

Ranking : Nota C
Número de Mensagens : 136
Idade : 24
Data de inscrição : 17/04/2010
Notas recebidas : C-B
Reputação : 11
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: Problema chato com rampas [ainda não foi resolvido :/]

Mensagem por zzxc em Dom 09 Maio 2010, 08:34

naum sei muito sobre rampas
mas acho que:

while (place_meeting(x,y,obj_rampa_parent))
{
y-=1 <-- isso cria uma reaçao de pulo e naum de subida
}
espero ter ajudado

zzxc

Ranking : Nota B
Número de Mensagens : 99
Idade : 24
Data de inscrição : 11/01/2010
Notas recebidas : B
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: Problema chato com rampas [ainda não foi resolvido :/]

Mensagem por shatterhand2 em Dom 09 Maio 2010, 11:46

Ele provavelmente está com o sprite de caindo pq vc está "subindo" o objeto mais do que a inclinação real da rampa... dai o personagem "cai" na rampa, e vc provavelmente está programando que quando a velocidade vertical do cara for diferente de zero, deve aparecer tal sprite.

To chutando, pq nao vi seu código inteiro, mas imagino que seja isso.

Em relação a nao pular... você disse que a interligação com as rampas está não solida? Você está verificando antes de pular se existe algo sólido embaixo do personagem? Porque se voce faz isso, e embaixo dele não tem nada sólido, ele de fato nao vai pular (obviamente). Tambem to chutando, mas o tutorial oficial de jogos de plataforma da Yoyo Games faz assim, então imagino que você esteja fazendo assim também.

Edit: Eu acho que com esse codigo no endstep do cara, voce vai sempre fazer ele subir um pixel se estiver enconstando na rampa, esteja ele andando ou nao... mesmo enquanto parado ele vai subir.... e logo em seguida vai cair por causa da gravidade...

antes de subir vc precisa verificar se a tecla que o move está sendo pressionada... e só ai fazer ele subir (ou descer caso seja o caso).

Eu nunca programei nenhum jogo de plataforma que usasse rampa, mas imagino que partindo da maneira que você está fazendo, a idéia seja essa.

shatterhand2

Número de Mensagens : 645
Idade : 33
Data de inscrição : 21/10/2009
Reputação : 11
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   : 0

http://shatterhand.beatthegame.net

Voltar ao Topo Ir em baixo

Re: Problema chato com rampas [ainda não foi resolvido :/]

Mensagem por Janx em Dom 09 Maio 2010, 12:06

shatterhand2 escreveu:
antes de subir vc precisa verificar se a tecla que o move está sendo pressionada... e só ai fazer ele subir (ou descer caso seja o caso).

Eu nunca programei nenhum jogo de plataforma que usasse rampa, mas imagino que partindo da maneira que você está fazendo, a idéia seja essa.

Se ele só subir se estiver pressionando a tecla, se ele soltar mas o personagem continua andando até parar totalmente (fricção, desaceleração) então ele entraria na rampa, concorda? Se ele pular, enquanto cai ele tambem vai entrar nela.
--
Como você esta fazendo para ele pular? Mande o código, provavelmente você vai precisar checar se tem chão um pouco mais abaixo do personagem.
Quando ele desce a rampa, ele vai parecer dando uns pulinhos mesmo pois ele anda horizontalmente mais rapido do que ele cai (verticalmente). Tem como arrumar? Tem, mas é um pouco complicado =/
Você poderia ver qual o angulo de inclinação da rampa em que ele esta, depois quando for andar, adicionar no valor Y do personagem:
y += sin(angulo_rampa)*velocidade_horizontal;
Dessa forma você acaba com o problema de subir ou descer rampas. Com velocidades muito altas pode dar algum bug!

Janx

Número de Mensagens : 2417
Idade : 23
Data de inscrição : 24/05/2008
Reputação : 14
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 2
   : 0

Voltar ao Topo Ir em baixo

Re: Problema chato com rampas [ainda não foi resolvido :/]

Mensagem por Rhino em Dom 09 Maio 2010, 12:16

shatterhand2 escreveu:Ele provavelmente está com o sprite de caindo pq vc está "subindo" o objeto mais do que a inclinação real da rampa... dai o personagem "cai" na rampa, e vc provavelmente está programando que quando a velocidade vertical do cara for diferente de zero, deve aparecer tal sprite.

To chutando, pq nao vi seu código inteiro, mas imagino que seja isso.

Em relação a nao pular... você disse que a interligação com as rampas está não solida? Você está verificando antes de pular se existe algo sólido embaixo do personagem? Porque se voce faz isso, e embaixo dele não tem nada sólido, ele de fato nao vai pular (obviamente). Tambem to chutando, mas o tutorial oficial de jogos de plataforma da Yoyo Games faz assim, então imagino que você esteja fazendo assim também.

Edit: Eu acho que com esse codigo no endstep do cara, voce vai sempre fazer ele subir um pixel se estiver enconstando na rampa, esteja ele andando ou nao... mesmo enquanto parado ele vai subir.... e logo em seguida vai cair por causa da gravidade...

antes de subir vc precisa verificar se a tecla que o move está sendo pressionada... e só ai fazer ele subir (ou descer caso seja o caso).

Eu nunca programei nenhum jogo de plataforma que usasse rampa, mas imagino que partindo da maneira que você está fazendo, a idéia seja essa.

Então, uma das coisas que eu pensei que pudesse ser seria a programação dos movimentos (até porque, uso sprites animados e só sei programar desse jeito que vou postar). Aqui estão os códigos:

Step do Jogador:
Código:
if (place_free(x,y+1))
{
gravity=0.5
pulo=true
}
else
{
gravity=0
pulo=false
}

if (keyboard_check(vk_left)) and !(keyboard_check(vk_right)) and (place_free(x-3,y))
{
hspeed=-hsp
direita=false
andando=true
}

if (keyboard_check(vk_right)) and !(keyboard_check(vk_left)) and (place_free(x+3,y))
{
hspeed=hsp
direita=true
andando=true
}

if !(keyboard_check(vk_left)) and !(keyboard_check(vk_right))
{
andando=false
hspeed=0
}

if keyboard_check_pressed(vk_up) and !(place_free(x,y+1))
{
sound_play(snd_pulo)
vspeed=-7
pulo=true
}

Outro Code do Step do Jogador:
Código:
if pulo=false and andando=true and direita=true
{
sprite_index=spr_jogador_andando
image_xscale=1
}
else if pulo=false and andando=true and direita=false
{
sprite_index=spr_jogador_andando
image_xscale=-1
}
else if pulo=false and andando=false and direita=true
{
sprite_index=spr_jogador_parado
image_xscale=1
}
else if pulo=false and andando=false and direita=false
{
sprite_index=spr_jogador_parado
image_xscale=-1
}

if pulo=true and direita=true
{
sprite_index=spr_jogador_pulo
image_xscale=1
}
else if pulo=true and direita=false
{
sprite_index=spr_jogador_pulo
image_xscale=-1
}

End Step do Jogador:
Código:
while (place_meeting(x,y,obj_rampa_parent))
{
y-=1
}

Não encontrei o problema (tentei resolver de várias maneiras e continou =/), mas se alguém puder me ajudar, ficarei muito grato. Só queria aprender aonde errei para já saber como fazer em outros jogos. (:

@Janx: Sim! Ele dá uns pulinhos mesmo! Você poderia me ensinar como resolver? =D

Rhino

Ranking : Nota C
Número de Mensagens : 136
Idade : 24
Data de inscrição : 17/04/2010
Notas recebidas : C-B
Reputação : 11
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: Problema chato com rampas [ainda não foi resolvido :/]

Mensagem por shatterhand2 em Dom 09 Maio 2010, 12:29

Se ele só subir se estiver pressionando a tecla, se ele soltar mas o personagem continua andando até parar totalmente (fricção, desaceleração) então ele entraria na rampa, concorda? Se ele pular, enquanto cai ele tambem vai entrar nela.

Eu nao considerei inércia... nesse caso tem que verificar se ele tem velocidade horizontal, e nao se a tecla está pressionada realmente. E ele ja deve ter programado pro cara nao "entrar" nos objetos sólidos, imagino eu. Isso não teria relação com so subir se a tecla está pressionada.

Eu to atrasado pra um compromisso... imagino que o Janx vai dar uma olhada nos teus codigos, mas se ele nao olhar até eu voltar, eu tento te ajudar Very Happy

shatterhand2

Número de Mensagens : 645
Idade : 33
Data de inscrição : 21/10/2009
Reputação : 11
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   : 0

http://shatterhand.beatthegame.net

Voltar ao Topo Ir em baixo

Re: Problema chato com rampas [ainda não foi resolvido :/]

Mensagem por Janx em Dom 09 Maio 2010, 13:31

Rhino escreveu:
Step do Jogador:
Código:
if (place_free(x,y+1))
{
gravity=0.5
pulo=true
}
else
{
gravity=0
pulo=false
}

if (keyboard_check(vk_left)) and !(keyboard_check(vk_right)) and (place_free(x-3,y))
{
hspeed=-hsp
direita=false
andando=true
}

if (keyboard_check(vk_right)) and !(keyboard_check(vk_left)) and (place_free(x+3,y))
{
hspeed=hsp
direita=true
andando=true
}

if !(keyboard_check(vk_left)) and !(keyboard_check(vk_right))
{
andando=false
hspeed=0
}

if keyboard_check_pressed(vk_up) and !(place_free(x,y+1))
{
sound_play(snd_pulo)
vspeed=-7
pulo=true
}

Outro Code do Step do Jogador:
Código:
if pulo=false and andando=true and direita=true
{
sprite_index=spr_jogador_andando
image_xscale=1
}
else if pulo=false and andando=true and direita=false
{
sprite_index=spr_jogador_andando
image_xscale=-1
}
else if pulo=false and andando=false and direita=true
{
sprite_index=spr_jogador_parado
image_xscale=1
}
else if pulo=false and andando=false and direita=false
{
sprite_index=spr_jogador_parado
image_xscale=-1
}

if pulo=true and direita=true
{
sprite_index=spr_jogador_pulo
image_xscale=1
}
else if pulo=true and direita=false
{
sprite_index=spr_jogador_pulo
image_xscale=-1
}

End Step do Jogador:
Código:
while (place_meeting(x,y,obj_rampa_parent))
{
y-=1
}

Não encontrei o problema (tentei resolver de várias maneiras e continou =/), mas se alguém puder me ajudar, ficarei muito grato. Só queria aprender aonde errei para já saber como fazer em outros jogos. (:

@Janx: Sim! Ele dá uns pulinhos mesmo! Você poderia me ensinar como resolver? =D

Primeiro me responda uma coisa:
TODOS os objetos "rampas" que tem o parent o objeto obj_rampa_parent estão marcados como sólidos? Verifique, pode ser o motivo de você não poder pular na rampa! Pois não estaria considerando a rampa como um "chao", logo não teria chao embaixo para o personagem pular!

Caso estejam marcadas como sólidas tente mudar o código do pulo assim:
Código:
    if keyboard_check_pressed(vk_up) and !(place_free(x,y+2)) //+2!
    {
    sound_play(snd_pulo)
    vspeed=-7
    pulo=true
    }
Agora ele já deve pular!

Para descer a rampa sem dar os pulinhos, vamos tentar mudar o código end step:
Código:

if hspeed != 0 && place_meeting(x,y+1,obj_rampa_parent)
{y+=1;}
while (place_meeting(x,y,obj_rampa_parent))
{y-=1;}

Sinceramente eu não acho que vai funcionar 100%, mas deve diminuir um pouco os pulinhos. Se quiser, faça o teste usando += 2 ou alguns valores maiores, mas no maximo uns 5~6! Se ainda não funcionar, tente usando:
Código:

if hspeed != 0 && place_meeting(x,y+1,obj_rampa_parent)
{y+= min(hspeed,5);}
while (place_meeting(x,y,obj_rampa_parent))
{y-=1;}

Esse deve ser o jeito mais simples, mas pode dar alguns pequenos bugs e o personagem ainda dar alguns pulinhos. Só testando para descobrir!
Boa sorte \o>

Janx

Número de Mensagens : 2417
Idade : 23
Data de inscrição : 24/05/2008
Reputação : 14
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 2
   : 0

Voltar ao Topo Ir em baixo

Re: Problema chato com rampas [ainda não foi resolvido :/]

Mensagem por Rhino em Dom 09 Maio 2010, 17:08

Janx escreveu:Primeiro me responda uma coisa:
TODOS os objetos "rampas" que tem o parent o objeto obj_rampa_parent estão marcados como sólidos? Verifique, pode ser o motivo de você não poder pular na rampa! Pois não estaria considerando a rampa como um "chao", logo não teria chao embaixo para o personagem pular!

Caso estejam marcadas como sólidas tente mudar o código do pulo assim:
Código:
    if keyboard_check_pressed(vk_up) and !(place_free(x,y+2)) //+2!
    {
    sound_play(snd_pulo)
    vspeed=-7
    pulo=true
    }
Agora ele já deve pular!

Para descer a rampa sem dar os pulinhos, vamos tentar mudar o código end step:
Código:

if hspeed != 0 && place_meeting(x,y+1,obj_rampa_parent)
{y+=1;}
while (place_meeting(x,y,obj_rampa_parent))
{y-=1;}

Sinceramente eu não acho que vai funcionar 100%, mas deve diminuir um pouco os pulinhos. Se quiser, faça o teste usando += 2 ou alguns valores maiores, mas no maximo uns 5~6! Se ainda não funcionar, tente usando:
Código:

if hspeed != 0 && place_meeting(x,y+1,obj_rampa_parent)
{y+= min(hspeed,5);}
while (place_meeting(x,y,obj_rampa_parent))
{y-=1;}

Esse deve ser o jeito mais simples, mas pode dar alguns pequenos bugs e o personagem ainda dar alguns pulinhos. Só testando para descobrir!
Boa sorte \o>

Então Janx, apenas o parent estava marcado como sólido! As rampas em si estavam não-sólidas!
Fiz o que você falou sobre marcá-las como sólidas e não adiantou, pois o personagem não consegue subir (nesse caso, acho que tem algo com a colisão do personagem com o parent), embora ele ficasse com o personagem parado quando em contato com as rampas (e não mais com o sprite de pulando). D:
Testei também com elas desmarcadas como sólidas e não adiantou. Ficou a mesma coisa! D8

Rhino

Ranking : Nota C
Número de Mensagens : 136
Idade : 24
Data de inscrição : 17/04/2010
Notas recebidas : C-B
Reputação : 11
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: Problema chato com rampas [ainda não foi resolvido :/]

Mensagem por Conteúdo patrocinado Hoje à(s) 18:22


Conteúdo patrocinado


Voltar ao Topo Ir em baixo

Ver o tópico anterior Ver o tópico seguinte Voltar ao Topo

- Tópicos similares

 
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum