objeto grudando nas paredes

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

Resolvido objeto grudando nas paredes

Mensagem por saim em Sex 19 Ago 2011, 14:10

Tenho um objeto que eu quero que seja arrastado pelo mouse, desde que determinadas condições sejam encontradas.
Sempre que esse objeto tocar alguma parede, seja no sentido que for, ele deveria deixar de ser arrastado e cair.
Ele não faz isso. Achei que fosse alguma das condições pra cair que não estava sendo encontrada, mas debuguei e ambas estavam ok.
Essas condições são (ou deveriam ser): "drag=0" e "!place_meeting(x, y+1, obj_wall)".
Depois de um tempo grudado na parede, o objeto muda de idéia e se solta.
Alguém sabe o que há de errado?

Eis os códigos do objeto:
>create<
Código:
drag=false; //checa se está sendo arrastado
mxprev=mouse_x; //mouse_x_previous
myprev=mouse_y; //mouse_y_previous
deltax=0; //hspeed
deltay=0; //vspeed
addGrav=0.5; //gravity
peso=0; //peso mesmo, do objeto
>mouse_left_press<
Código:
object_event_add(obj_movable, ev_mouse, ev_left_press, '
if (poder==maoFant && level[maoFant]>=peso){ //está usando o poder certo e suporta o objeto
   drag=true;
   }
>mouse_global_left_release<
Código:
drag=false;
>step<
Código:
if (drag==true){ //se está arrastando
   deltax=mouse_x-mxprev; deltay=mouse_y-myprev; //anda junto com o mouse
   tempoPoder=max(tempoPoder-1, 0); //gasta um pouco do poder
   if (tempoPoder==0){ //se o poder acabou
      drag=false; //solta o objeto
      }
   }
   else{ //se não está arrastando, cai
      deltax*=0.9; //um pouco de atrito com o ar
      deltay+=(!place_meeting(x, y+1, obj_wall))*addGrav; //minha própria gravidade
      }

if !place_meeting(x+deltax, y+deltay, obj_wall){ //se tem espaço pra mover
   x+=deltax; y+=deltay; //move
   }
   else{ //place_meeting=true
      var len, dir, unitx, unity, i;
      len=point_distance(0, 0, deltax, deltay); //espaço máximo pra mover
      dir=point_direction(0, 0, deltax, deltay); //direção pra mover
      unitx=lengthdir_x(1, dir); unity=lengthdir_y(1, dir); //1 pixel na direção certa
      for(i=0; i<len; i+=1){ //antes era "while (!place_meeting(x+unitx, y+unity, obj_wall)){"
         if (!place_meeting(x+unitx, y+unity, obj_wall)){ //o while dispensava isso
            x+=unitx; y+=unity; //anda 1 pixel
            }
         }
      drag=false; //para de arrastar (mesmo se não estiver arrastando)
       deltax=0; deltay=0;
      }

mxprev=mouse_x; myprev=mouse_y; //atualiza essas variáveis só no final do step
>draw (só pra debug)<
Código:
draw_sprite(sprite_index, image_index, x, y);
draw_text(x, y-40, "drag="+string(drag));
draw_text(x, y-20, "met="+string(!place_meeting(x, y+1, obj_wall)));
pra testar esses códigos, você precisará declarar algumas variáveis (que, no jogo, são globais, mas pra efeito de teste podem ser locais):
Código:
maoFant=0;
poder=maoFant;
level[maoFant]=0;
tempoPoder=200;


Última edição por saim em Sex 19 Ago 2011, 14:33, editado 2 vez(es)

saim

Ranking : Nota B
Número de Mensagens : 2964
Idade : 38
Data de inscrição : 14/01/2011
Notas recebidas : C-D-A-B
Reputação : 121
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   : 3

Voltar ao Topo Ir em baixo

Resolvido Re: objeto grudando nas paredes

Mensagem por Lucas 5293 em Sex 19 Ago 2011, 14:17

Tente substituir o if pelo while, por exemplo:
Código:
while(drag=0 and !place_meeting(x, y+1, obj_wall))
{
x=mouse_x
y=mouse_y
}

Lucas 5293

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

http://dopxgames.blogspot.com

Voltar ao Topo Ir em baixo

Resolvido Re: objeto grudando nas paredes

Mensagem por saim em Sex 19 Ago 2011, 14:24

Isso vai travar o jogo, porque o while nunca sairá do loop.

saim

Ranking : Nota B
Número de Mensagens : 2964
Idade : 38
Data de inscrição : 14/01/2011
Notas recebidas : C-D-A-B
Reputação : 121
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   : 3

Voltar ao Topo Ir em baixo

Resolvido Re: objeto grudando nas paredes

Mensagem por saim em Sex 19 Ago 2011, 14:30

Foi mal, moçada, era coisa simples. Está resolvido, podem trancar.
Editei o post original, agora funciona.

saim

Ranking : Nota B
Número de Mensagens : 2964
Idade : 38
Data de inscrição : 14/01/2011
Notas recebidas : C-D-A-B
Reputação : 121
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   : 3

Voltar ao Topo Ir em baixo

Resolvido Re: objeto grudando nas paredes

Mensagem por Conteúdo patrocinado Hoje à(s) 20:10


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