Conectar-se
Quem está conectado
24 usuários online :: Nenhum usuário registrado, Nenhum Invisível e 24 Visitantes

Nenhum

Ver toda a lista


Compartilhe
Ver o tópico anteriorIr em baixoVer o tópico seguinte
avatar
Data de inscrição : 11/08/2009
Número de Mensagens : 213
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 0
Ver perfil do usuário

Como segurar na borda?

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
avatar
Data de inscrição : 11/08/2009
Número de Mensagens : 213
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 0
Ver perfil do usuário

Re: Como segurar na borda?

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
avatar
Data de inscrição : 24/05/2008
Número de Mensagens : 2417
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 14

Prêmios
   : 0
   : 2
   : 0
Ver perfil do usuário

Re: Como segurar na borda?

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.
avatar
Data de inscrição : 11/08/2009
Número de Mensagens : 213
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 0
Ver perfil do usuário

Re: Como segurar na borda?

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
avatar
Data de inscrição : 01/06/2008
Número de Mensagens : 1015
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 0

Prêmios
   :
   :
   :
Ver perfil do usuáriohttp://supermariobrasileiro.blogspot.com

Re: Como segurar na borda?

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.
avatar
Data de inscrição : 11/08/2009
Número de Mensagens : 213
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 0
Ver perfil do usuário

Re: Como segurar na borda?

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
avatar
Data de inscrição : 24/05/2008
Número de Mensagens : 2417
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 14

Prêmios
   : 0
   : 2
   : 0
Ver perfil do usuário

Re: Como segurar na borda?

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!!
avatar
Data de inscrição : 01/06/2008
Número de Mensagens : 1015
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 0

Prêmios
   :
   :
   :
Ver perfil do usuáriohttp://supermariobrasileiro.blogspot.com

Re: Como segurar na borda?

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.
avatar
Data de inscrição : 11/08/2009
Número de Mensagens : 213
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 0
Ver perfil do usuário

Re: Como segurar na borda?

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
avatar
Data de inscrição : 01/06/2008
Número de Mensagens : 1015
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 0

Prêmios
   :
   :
   :
Ver perfil do usuáriohttp://supermariobrasileiro.blogspot.com

Re: Como segurar na borda?

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í.
avatar
Data de inscrição : 24/05/2008
Número de Mensagens : 2417
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 14

Prêmios
   : 0
   : 2
   : 0
Ver perfil do usuário

Re: Como segurar na borda?

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
avatar
Data de inscrição : 11/08/2009
Número de Mensagens : 213
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 0
Ver perfil do usuário

Re: Como segurar na borda?

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
avatar
Ranking : Sem avaliações
Data de inscrição : 08/06/2008
Número de Mensagens : 2314
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 100

Prêmios
   : 3
   : 0
   : 1
Ver perfil do usuáriohttp://blackcapapps.blogspot.com.br/

Re: Como segurar na borda?

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.
avatar
Data de inscrição : 11/08/2009
Número de Mensagens : 213
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 0
Ver perfil do usuário

Re: Como segurar na borda?

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
Ver o tópico anteriorVoltar ao TopoVer o tópico seguinte
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum