[Resolvido]Problema com engine de pulo com animação

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

Resolvido [Resolvido]Problema com engine de pulo com animação

Mensagem por FishyHatGuy em Sex 19 Ago 2011, 20:26

Simples caros desenvolvedores, tentei criar um pulo com animação pro meu jogo usando este tutorial aqui: [Link]

Só que agora minha engine está zuada D:

Tenho dois problemas:

1- O personagem "afunda" quando cai no chão por causa do sprite utilizado para o pular/cair;
2- Uma vez que pula o personagem fica quicando a não ser que eu force outra animação nele (neste caso, a animação de ataque)

A seguir o código para pulo que eu fiz:

Código:
// ================= Code for jumping and stuff ==================

    // Gravity for the hero
    if place_free(x,y+1){
        gravity=1;
    }
    else {
        gravity = 0;
    }

    // Jump for the hero
    if key_detection[4] == true && jumpDetection == false{

        if jumpState == 0 && place_meeting(x,y+1,Collision_Block){
            sprite_index = Jump_Begin;
            if dir_R == true{ image_xscale = 1; }
            if dir_L == true{ image_xscale = -1; }
            image_speed = 1/2;
            alarm[0] = 2;
        }
       
        jumpDetection = true;
       
    }
   
    if jumpState != 0 && !place_free(x,y+1){
        jumpState = 0;
        vspeed = -12.5;
        sprite_index = Air;
        if dir_R == true{ image_xscale = 1; }
        if dir_L == true{ image_xscale = -1; }
        image_speed = 1/2;
    }
   
    if vspeed > 0 {
   
        jumpState = -1;
       
        if dir_R == true{
            sprite_index = Air;
            image_xscale = 1;
        }
   
        if dir_L == true{
            sprite_index = Air;
            image_xscale = -1;
        }
    }
   
    if !place_free(x,y+1) and jumpState < 0{
        sprite_index = Jump_End;
        if dir_R == true{ image_xscale = 1; }
        if dir_L == true{ image_xscale = -1; }
        image_speed = 1/2;
        jumpState = 0;
    }

}

Onde: jumpDetection é a variável que mostra se o personagem principal está pulando ou não, jumpState mostra o estado do pulo (-1 = Descendo; 0 = Neutro; 1 = Subindo), dir_R(L) mostra em que direção se encontra o personagem principal e key_detection[4] é uma variável que é verdadeira (true) quando o botão de pulo é acionado.

Agradeço já qualquer ajuda o/


Última edição por Mathaeuz em Dom 21 Ago 2011, 01:13, editado 2 vez(es) (Razão : Ativação da marcação "Avisar-me quando uma resposta for postada.")

FishyHatGuy

Número de Mensagens : 18
Data de inscrição : 30/04/2011
Reputação : 1
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

Resolvido Re: [Resolvido]Problema com engine de pulo com animação

Mensagem por Super Games em Sex 19 Ago 2011, 20:47

Bom...não entendi direito, você quer dizer que o movimento está bastante zuado?

Off:Como eu adiciono um FriendCode?Tenho um 3DS e queria lhe adicionar a minha lista.

Super Games

Ranking : Nota D
Número de Mensagens : 2704
Idade : 18
Data de inscrição : 10/06/2010
Notas recebidas : D
Reputação : 10
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Resolvido Re: [Resolvido]Problema com engine de pulo com animação

Mensagem por FishyHatGuy em Sex 19 Ago 2011, 20:55

Como eu já falei, tem esse problema de colisão que faz o personagem afundar no chão quando somente cai, e o de ficar quicando quando ele pula.

Off:Tem que ir na lista de amigos, aí ambos temos que adicionar o FC um do outro :]

FishyHatGuy

Número de Mensagens : 18
Data de inscrição : 30/04/2011
Reputação : 1
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

Resolvido Re: [Resolvido]Problema com engine de pulo com animação

Mensagem por Spadan_RTicou em Sab 20 Ago 2011, 11:51

vc errou no gravity=0
não é o gravity mais sim o vspeed=0

Spadan_RTicou

Número de Mensagens : 71
Idade : 18
Data de inscrição : 13/11/2010
Reputação : 1
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Resolvido Re: [Resolvido]Problema com engine de pulo com animação

Mensagem por FishyHatGuy em Sab 20 Ago 2011, 12:33

Pior que não é, isso não mudou nada, aliás, na colisão com o chão eu forço vspeed = 0.
Alguém aí poderia ceder uma engine mais elaborada pra eu ter uma idéia de como resolver meu problema?

FishyHatGuy

Número de Mensagens : 18
Data de inscrição : 30/04/2011
Reputação : 1
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

Resolvido Re: [Resolvido]Problema com engine de pulo com animação

Mensagem por Spadan_RTicou em Sab 20 Ago 2011, 23:12

porque vc ão tenta tirar o gravity e nem vspeed e só usar y e x

Spadan_RTicou

Número de Mensagens : 71
Idade : 18
Data de inscrição : 13/11/2010
Reputação : 1
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Resolvido Re: [Resolvido]Problema com engine de pulo com animação

Mensagem por FishyHatGuy em Sab 20 Ago 2011, 23:15

Mexer apenas com x e y pode zuar com a colisão, mesmo se ela estiver certinha. Por exemplo, o personagem pode ser "empurrado" bruscamente ao colidir com um objeto sólido, ou não chegar a encostar na parede dependendo de como a colisão é checada. Com o hspeed, vspeed e gravity eu não preciso me preocupar com isso.

FishyHatGuy

Número de Mensagens : 18
Data de inscrição : 30/04/2011
Reputação : 1
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

Resolvido Re: [Resolvido]Problema com engine de pulo com animação

Mensagem por Spadan_RTicou em Sab 20 Ago 2011, 23:22

isto resolve
create
Código:
vvel=0
mov_dir=false
mov_esq=false
no_ar=false
step
Código:
if keyboard_check(vk_right){mov_dir=true mov_esq=false}
if keyboard_check(vk_left){mov_dir=false mov_esq=true}
if keyboard_check(vk_left) and keyboard_check(vk_right){mov_dir=false mov_esq=false}
if !keyboard_check(vk_left) and !keyboard_check(vk_right){mov_dir=false mov_esq=false}}else{if no_ar{if keyboard_check(vk_right){mov_dir=true mov_esq=false}
if keyboard_check(vk_left){mov_dir=false mov_esq=true}
if keyboard_check(vk_left) and keyboard_check(vk_right){mov_dir=false mov_esq=false}
if !keyboard_check(vk_left) and !keyboard_check(vk_right){mov_dir=false mov_esq=false}}
Código:
vel=argument0//aqui temos uma variavel q servira como um tipo de velocidade
//é basicamente quantos pixels serão avaçados ou recuados em cada step

//movimento para a direita
if mov_dir{ //essa variavel se ativada, movimentara o objeto que estiver executando o script
 if place_free(x+vel,y){x+=vel}//aqui o movimento é normal, sem obstrução
 else
 if place_free(x+vel,y-1){x+=vel-1 y-=1} //se estiver obstruido checa em um pixel a cima
 else
 if place_free(x+vel,y-2){x+=vel-1 y-=2}//dois pixels
  else
 if place_free(x+vel,y-3){x+=vel-1 y-=3}//três
  else
 if place_free(x+vel,y-4){x+=vel-1 y-=4}//quatro
 else
 if place_free(x+vel,y-5){x+=vel-1 y-=5}//dois pixels
  else
 if place_free(x+vel,y-6){x+=vel-1 y-=6}//três
  else
 if place_free(x+vel,y-7){x+=vel-1 y-=7}//quatro
 else
 if place_free(x+vel,y-8){x+=vel-1 y-=8} //se estiver obstruido checa em um pixel a cima
 else
 if place_free(x+vel,y-9){x+=vel-1 y-=9}//dois pixels
  else
 if place_free(x+vel,y-10){x+=vel-1 y-=10} //se estiver obstruido checa em um pixel a cima
 else
 if place_free(x+vel,y-11){x+=vel-1 y-=11}//dois pixels
  else
 if place_free(x+vel,y-12){x+=vel-1 y-=12}//três
}
//movimento para a esquerda
//aqui temos basicamente a mesma coisa que para a direita, só que como quermos ir para a esquerda
//os valores em X tem de ser negativos.
if mov_esq{
 if place_free(x-vel,y){x-=vel}
 else
 if place_free(x-vel,y-1){x-=vel-1 y-=1} //vai adicionando um pixel
 else
 if place_free(x-vel,y-2){x-=vel-1 y-=2}
  else
 if place_free(x-vel,y-3){x-=vel-1 y-=3}
  else
 if place_free(x-vel,y-4){x-=vel-1 y-=4}
  else
 if place_free(x-vel,y-5){x-=vel-1 y-=5}
  else
 if place_free(x-vel,y-6){x-=vel-1 y-=6}
  else
 if place_free(x-vel,y-7){x-=vel-1 y-=7}
  else
 if place_free(x-vel,y-8){x-=vel-1 y-=8}
  else
 if place_free(x-vel,y-9){x-=vel-1 y-=9}
  else
 if place_free(x-vel,y-10){x-=vel-1 y-=10} //vai adicionando um pixel
 else
 if place_free(x-vel,y-11){x-=vel-1 y-=11}
  else
 if place_free(x-vel,y-12){x-=vel-1 y-=12}
}
//encaixando no chão
//aquele negocio de setar a variavel "no_ar" para false é somente uma precaução para que não "desgrude"
//do chão enquanto estiver descendo uma rampa.
if vvel>=0{
if place_free(x,y+1) and !place_free(x,y+2){y+=1 no_ar=false vel=vel+1}
if place_free(x,y+2) and !place_free(x,y+3){y+=2 no_ar=false vel=vel+1}
if place_free(x,y+3) and !place_free(x,y+4){y+=3 no_ar=false vel=vel+1}
if place_free(x,y+4) and !place_free(x,y+5){y+=4 no_ar=false vel=vel+1}
if place_free(x,y+5) and !place_free(x,y+6){y+=5 no_ar=false vel=vel+1}
if place_free(x,y+6) and !place_free(x,y+7){y+=6 no_ar=false vel=vel+1}
if place_free(x,y+7) and !place_free(x,y+8){y+=7 no_ar=false vel=vel+1}
if place_free(x,y+8) and !place_free(x,y+9){y+=8 no_ar=false vel=vel+1}
if place_free(x,y+9) and !place_free(x,y+10){y+=9 no_ar=false vel=vel+1}
if place_free(x,y+10) and !place_free(x,y+11){y+=10 no_ar=false vel=vel+1}
if place_free(x,y+11) and !place_free(x,y+12){y+=11 no_ar=false vel=vel+1}
if place_free(x,y+12) and !place_free(x,y+13){y+=12 no_ar=false vel=vel+1}   

//checando se está no chão
//ele encaixa no chão no maximo em três pixels, se estiver livre, então esta no ar.
if place_free(x,y+3){no_ar=true}
if !place_free(x,y+3){if vvel>0{no_ar=false}}}

//aqui fica o controle da velocidade vertical que é uma variavel que depois é adicionada a Y
if no_ar{
if vvel<8 {vvel+=0.4}else{vvel=8}}//aqui limitamos a variavel "vvel" a 5, se estiver menor que isso
//será adicionado 0.2 a cada step, para chegar a 5
if !no_ar{vvel=0}//se não estiver no ar, a velocidade vertical e setada a zero.

//colisão em cima
//se houver um solido em y-4 e a velocidade vertical for menor que zero, ou seja, se estiver subindo
//a velocidade sera setada pra zero.
if vvel<0 and !place_free(x,y-4){vvel=0}

//adicionando a vvelocidade vertical a .X
y+=vvel
Código:
if keyboard_check_pressed(ord("S")){
if !no_ar{vvel-=7 no_ar=true}
}
if keyboard_check_released(ord("S")){
if vvel<0{vvel/=2}
}
respectivamente

Spadan_RTicou

Número de Mensagens : 71
Idade : 18
Data de inscrição : 13/11/2010
Reputação : 1
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Resolvido Re: [Resolvido]Problema com engine de pulo com animação

Mensagem por FishyHatGuy em Dom 21 Ago 2011, 00:03

Bem...consegui consertar o problema de um jeito mais simples (mas tive que refazer a engine do zero @_@), ainda sim agradeço a ajuda, podem trancar o tópico o/

FishyHatGuy

Número de Mensagens : 18
Data de inscrição : 30/04/2011
Reputação : 1
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

Resolvido Re: [Resolvido]Problema com engine de pulo com animação

Mensagem por Conteúdo patrocinado Hoje à(s) 03:02


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