Como segurar na borda?

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

Como segurar na borda?

Mensagem por Naut2006 em Seg 17 Ago 2009, 14:08

Fala galera. To com um problema aqui que nã consigo resolver de jeio nenhum.
É que eu quero que o personagem agarre na borda do chão. Para quem não entendeu, uma imagem:



Ele tem que mudar o sprite para o dele segurando ali na borda do chão e ficar com a mão em cima do chao. Uma pequena montagem pra vcs entenderem melhor o que eu quero:



Vlw galera =D

Goodbye Happy

Naut2006

Número de Mensagens : 213
Idade : 20
Data de inscrição : 11/08/2009
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

Re: Como segurar na borda?

Mensagem por Naut2006 em Ter 18 Ago 2009, 20:07

Tava esperando alguem postar, mas como não aconteceu, eu vou ter que dar doublepost mesmo, pra não ter que criar outro tópico. É que surgiu outra dúvida:

Quando eu coloco para um sprite seguir outro (tipo x=objeto.x e y=objeto.y) ele até seugue o outro, mas quando ele faz movimentos muito rápidos (como é para seguir o player, normalmente quando ele pula ou está caindo) o outro objeto vai seguindo ele mas com um atraso, um pouco atras dele. Queria saber como faz para ficar SEMPRE na mesma posição que o player

Vlw, e maus o double-post Razz

Goodbye Happy

Naut2006

Número de Mensagens : 213
Idade : 20
Data de inscrição : 11/08/2009
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

Re: Como segurar na borda?

Mensagem por Janx em Ter 18 Ago 2009, 20:17

o jeito mais facil para as bordas é colocar um detector, que quando o player bate nele ele entende que está segurando na borda.

Quanto a seguir o objeto, coloque no draw dele:
Código:
x = objeto.x;
y = objeto.y;

Caso seu personagem 'suma' é pq o evento de desenha-lo automaticamente do GM foi cancelado por você adicionar o evento draw, entao adicione o codigo ABAIXO desse que falei:

Código:
draw_sprite(sprite_index,image_index,x,y);

OBS: isso desenha o sprite sem nenhuma mudança como 'image_blend', 'image_angle', 'image_alpha', etc. Que so poderiam ser usadas na versao pro do GM.

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: Como segurar na borda?

Mensagem por Naut2006 em Ter 18 Ago 2009, 20:39

O negocio de seguir funciona blz, mas o da borda eu já fiz isso e não funciono, pq o sprite muda mas ele continua caindo, quando ele fica parado não é com a mão em cima ali do chao, entende?

Mas vlw de qualquer jeito =D

Goodbye Happy

Naut2006

Número de Mensagens : 213
Idade : 20
Data de inscrição : 11/08/2009
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

Re: Como segurar na borda?

Mensagem por CPinheiro em Qua 19 Ago 2009, 16:43

Olha cara, o melhor jeito de fazer isso é programando um movimento por estados, mas isso é um pouco complicado. Se quiser, deve ter tutoriais na Net, mas a base é essa:

Create:
Código:

state_tipo=0; //0 no chão, 1 no ar
state=0; //o estado no personagem: um exemplo: 0 parado, 1 andando, 2 atacando, 3 agachado. Se estiver no ar (state_tipo=1), 0 pulando, 1 caindo, 2 atacando no ar, etc.

Então, no caso, teria uma situação de que se o personagem estivesse caindo, estiver colidindo de LADO com o bloco e o jogador apertar uma tecla que faça isso (Up, por exemplo), muda o estado dele para pendurado:

Código:

state= 5 //Aqui, você coloca um número que você escolhe para quando ele está pendurado, por exemplo, 5

Então, no movimento, você coloca o seu código (do movimento) dentro dessas chaves:

Código:

if (state!=5) //Se NÃO estiver pendurado
{
//código do movimento
}

Esse código acima é para que o personagem não saia andando enquanto está segurando. Depois, é só fazer com que ele possa se despendurar dando um 'salto', por exemplo:

Código:

if keyboard_check_pressed(vk_up) && (state==5) //Se apertou tecla Up (seta pra cima) e o jogador está pendurado
{
vspeed=-5; //jogador pula, por exemplo
state=0;
state_tipo=1; //Essas duas linhas iriam trocar o estado dele: state_tipo=1 (no ar, não está no chão) e state=0 (está pulando)
}


Essa é a base, é só você adaptar o movimento do seu jogo e ir testando até conseguir eliminar todos os bugs. Boa sorte. o/
Falows.

CPinheiro

Número de Mensagens : 1015
Idade : 20
Data de inscrição : 01/06/2008
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   :
   :
   :

http://supermariobrasileiro.blogspot.com

Voltar ao Topo Ir em baixo

Re: Como segurar na borda?

Mensagem por Naut2006 em Qua 19 Ago 2009, 20:18

Não funcionou. Gente, é que vcs tao se esquecendo que a mão tem que ficar em cima da borda, e é isso que eu não to conseguindo :/

Mas vlw pela ajuda ate agora

Goodbye Happy

Naut2006

Número de Mensagens : 213
Idade : 20
Data de inscrição : 11/08/2009
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

Re: Como segurar na borda?

Mensagem por Janx em Qua 19 Ago 2009, 21:32

faz para quando ele colidir no detector, mudar a posiçao dele.
PRA QUAL?!?!
Nao sei, testa ai até ficar na posiçao correta.

Lembre-se de desativar a gravidade e zerar a velocidade para ele nao se mover mais enquanto segura na borda!!

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: Como segurar na borda?

Mensagem por CPinheiro em Qua 19 Ago 2009, 21:35

E não se esqueça de reativar isso depois, quando ele largar a borda. Pode parecer algo óbvio e idiota, mas é um erro bobo que as vezes nos rende dores de cabeça. É sério.

CPinheiro

Número de Mensagens : 1015
Idade : 20
Data de inscrição : 01/06/2008
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   :
   :
   :

http://supermariobrasileiro.blogspot.com

Voltar ao Topo Ir em baixo

Re: Como segurar na borda?

Mensagem por Naut2006 em Qua 19 Ago 2009, 22:10

Não sei se é um bug do gm, mas já tentei zerar a gravidade e ele continua caindo. Já tentei usar o vspeed=0 tbm nao funciona. E mudar pra uma certa posição nao adianta, ja que tem mais de uma borda no jog. de qualquer forma, ta aqui o codigo que eu tenho agora:

Código:
if collision_rectangle(x+3,y-50,x+13,y-7,obj_chao_canto_esq,true,0)
    {x=obj_chao_canto_esq.x
    y=obj_chao_canto_esq.y
    segurando=true
    sprite_index=sprite21}

Mas não funciona :/

Goodbye Happy

Naut2006

Número de Mensagens : 213
Idade : 20
Data de inscrição : 11/08/2009
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

Re: Como segurar na borda?

Mensagem por CPinheiro em Qua 19 Ago 2009, 22:12

Tentou usar os dois ao mesmo tempo?
Desculpe, não pude avaliar seu código, tenho que sair agora. :\
Boa sorte aí.

CPinheiro

Número de Mensagens : 1015
Idade : 20
Data de inscrição : 01/06/2008
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   :
   :
   :

http://supermariobrasileiro.blogspot.com

Voltar ao Topo Ir em baixo

Re: Como segurar na borda?

Mensagem por Janx em Qui 20 Ago 2009, 13:38

Naut2006 escreveu:Não sei se é um bug do gm, mas já tentei zerar a gravidade e ele continua caindo. Já tentei usar o vspeed=0 tbm nao funciona. E mudar pra uma certa posição nao adianta, ja que tem mais de uma borda no jog. de qualquer forma, ta aqui o codigo que eu tenho agora:

Código:
if collision_rectangle(x+3,y-50,x+13,y-7,obj_chao_canto_esq,true,0)
    {x=obj_chao_canto_esq.x
    y=obj_chao_canto_esq.y
    segurando=true
    sprite_index=sprite21}

Mas não funciona :/

Goodbye Happy

tente o codigo assim:

Código:

if collision_rectangle(x+3,y-50,x+13,y-7,obj_chao_canto_esq,true,0)
    {x=obj_chao_canto_esq.x
    y=obj_chao_canto_esq.y
    segurando=true
    sprite_index=sprite21
    vspeed = 0;
    gravity = 0;
}

e de uma olhada se nao tem em nenhum lugar que está setando a gravidade para outro valor dinovo!!!!
Se tiver coloque uma comparaçao como:
Código:
if !segurando
{
  ....
  ...
  gravity = ??
}

flw

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: Como segurar na borda?

Mensagem por Naut2006 em Qui 20 Ago 2009, 22:39

Não funciona gente :/ Eu já verifiquei a gravidade, ta para ficar zero mesmo. To mandando o arquivo do projeto, para voces terem uma ideia melhor do que ta acontecendo:

Projeto_2.gmk - 0.04MB

São só 40kb. Caso possivel deem uma olhadinha pra ver se não tem nada errado no codigo.

Valeu mesmo pelo esforço que vc tao fazendo


Goodbye Happy

Naut2006

Número de Mensagens : 213
Idade : 20
Data de inscrição : 11/08/2009
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

Re: Como segurar na borda?

Mensagem por Kabeção em Sex 21 Ago 2009, 00:28

Oh sim!
Há muitas coisas erradas.
A começar pela impressão de não ter nada errado. Razz

Você está mandando ele ficar parado na parede não importa o que aconteça.
Mesmo se jogador apertar o botão de pular ele ainda vai estar sendo ordenado o ficar parado nas bordas.
Então uma condição deve ser feita no evento de colisão para quando o jogador querer pular o código da colisão não fazer mais efeito.

Você esta usando variaveis para estado não é?
Então quando o estado for o de pulo, o código que manda ele ficar parado é anulado.
Para endenter melhor um exemplo:
Código:
if pulo = false
{
    move_contact_solid(direction,8)
    vspeed=0
}

Fique atendo a programação dos outros estados também.
Esse tipo de bug acontece sempre.

Kabeção

Ranking : Sem avaliações
Número de Mensagens : 2314
Data de inscrição : 08/06/2008
Reputação : 100
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 3
   : 0
   : 1

http://blackcapapps.blogspot.com.br/

Voltar ao Topo Ir em baixo

Re: Como segurar na borda?

Mensagem por Naut2006 em Sex 21 Ago 2009, 00:59

Vlw kabeção. To reformulando o movimento dele aqui, depois eu digo se deu certo =D

Goodbye Happy

Naut2006

Número de Mensagens : 213
Idade : 20
Data de inscrição : 11/08/2009
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

Re: Como segurar na borda?

Mensagem por Conteúdo patrocinado Hoje à(s) 00:17


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