Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: AndreiiCx en Marzo 05, 2013, 06:08:29 AM

Título: Colision perfecta cenital con mouse
Publicado por: AndreiiCx en Marzo 05, 2013, 06:08:29 AM
:-[ sigo con mis problemas ???

Alguien sabe como puedo hacer una colisión perfecta en un cenital pero con movimiento con el mouse?
El código que utilizo para el movimiento es este:
if distance_to_point(mouse_x,mouse_y)>=35
{if (mouse_check_button(mb_left))
    {acc=1;
if (x != mouse_x) && (y != mouse_y)
        {    move_towards_point(mouse_x,mouse_y,5);
        };
    };
};

if (mouse_check_button_released(mb_left)) || (distance_to_point(mouse_x,mouse_y)<=0.1)
{acc=0;
speed=0;
};


PD: probé el código de Twister (http://www.comunidadgm.org/index.php?topic=10823.msg77462#msg77462) que aparece en los resultados de búsqueda pero no eh sabido implementarlo para este tipo de movimiento :'(

EDIT: Agregué el código que uso para el movimiento
Título: Re:Colision perfecta cenital con mouse
Publicado por: brunoxzx en Marzo 05, 2013, 07:15:48 AM
Para empezar tu no eras el que preguntaba por el movimiento sin diagonales?, intentaré hacer el código para que funcione SIN diagonales y así responder a la  otra pregunta, si lo quieres de otro modo avisas.

[gml]
if distance_to_point(mouse_x,mouse_y)>=35
{if (mouse_check_button(mb_left))
    {acc=1;
if (x != mouse_x)
        {   
               var d;
               d=mouse_x-x;
               //reemplaza lo 5 por la velocidad
               if d<=5{
                     x+=sign(d)*5;
               }else{
                     x=mouse_x;
               }
               repeat(5){
                     if !place_free(x, y) break;
                     x-=sign(d);
               }
        }else
        if y!=mouse_y{
               var d;
               d=mouse_y-y;
               //reemplaza lo 5 por la velocidad
               if d<=5{
                     y+=sign(d)*5;
               }else{
                     y=mouse_y;
               }
               repeat(5){
                     if place_free(x, y) break;
                     y-=sign(d);
               }
       }
    };
};

if (mouse_check_button_released(mb_left)) || (distance_to_point(mouse_x,mouse_y)<=0.1)
{acc=0;
speed=0;
};
[/gml]

Y eso es todo
Título: Re:Colision perfecta cenital con mouse
Publicado por: AndreiiCx en Marzo 06, 2013, 04:13:08 AM
primero que nada gracias por responder :DD. si soy haha xD y no ah funcionado): el jugador ahora se teletransporta hasta donde esta el mouse y solo en Y Positivo, en negativo no se mueve y en el eje X tampoco se mueve.
Título: Re:Colision perfecta cenital con mouse
Publicado por: brunoxzx en Marzo 06, 2013, 04:35:16 AM
Uh, perdón, así debería de funcionar.
[gml]
if (mouse_check_button(mb_left))
{
if (x != mouse_x)
        {   
               var d;
               d=mouse_x-x;
               if abs(d)>5{
                     x+=sign(d)*5;
               }else{
                     x=mouse_x;
               }
               repeat(5){
                     if place_free(x, y) break;
                     x-=sign(d);
               }
        }
        else if (y != mouse_y){
               var d;
               d=mouse_y-y;
               if abs(d)>5{
                     y+=sign(d)*5;
               }else{
                     y=mouse_y;
               }
               repeat(5){
                     if place_free(x, y) break;
                     y-=sign(d);
               }

       }

};
[/gml]
Título: Re:Colision perfecta cenital con mouse
Publicado por: AndreiiCx en Marzo 07, 2013, 01:55:27 AM
 :o es perfecto(: pero al darle prioridad al eje Y se estacan contra las paredes si no le permiten moverse en ese eje xD supongo q estoy pidiendo de mas(:
Título: Re:Colision perfecta cenital con mouse
Publicado por: brunoxzx en Marzo 09, 2013, 06:38:36 PM
Nah, es error mio no había pensado en eso.
Cita de: brunoxzx en Marzo 06, 2013, 04:35:16 AM
Uh, perdón, así debería de funcionar.
[gml]
if (mouse_check_button(mb_left))
{
var a;
a=true;
if (x != mouse_x)
        {   
               var d;
               a=false;
               d=mouse_x-x;
               if abs(d)>5{
                     x+=sign(d)*5;
               }else{
                     x=mouse_x;
               }
               repeat(5){
                     if place_free(x, y) break;
                     x-=sign(d);
                     a=true;
               }
        }
        if ( (y != mouse_y) && a ){
               var d;
               d=mouse_y-y;
               if abs(d)>5{
                     y+=sign(d)*5;
               }else{
                     y=mouse_y;
               }
               repeat(5){
                     if place_free(x, y) break;
                     y-=sign(d);
               }

       }

};
[/gml]
Supongo que así debería de solucionarse  :-[.