Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: somnus en Febrero 03, 2011, 09:13:25 PM

Título: Codigo MoveToward
Publicado por: somnus en Febrero 03, 2011, 09:13:25 PM

Hola amigos me gustaria implementar el move towards de game maker

pero me siento bloqueado.

se que es sacar grados y dirigir hacia alla el objeto poniendo dandole a las variables ese valor hacia el grado.

el punto es que no se que funciones trigonometricas tengo que usar.

el codigo para hacer eso, o funciones matematicas o cualquier ayuda es bienvenida.
Título: Re: Codigo MoveToward
Publicado por: jmgandalf en Febrero 03, 2011, 10:12:30 PM
Hola,

Bueno, depende de como quieras que sea el 'move towards'.

Puede ser un movimiento directo, apuntando el objecto hacia el objetivo, y dando una velocidad concreta.

Por ejemplo, para mover hacia donde esta el mouse:

[gml]
direction = point_direction(x,y, mouse_x, mouse_y)
speed = 15
[/gml]

Ahora si lo que quieres es tener un movimiento relativo, ahi puedes usar el motion_add, asi:

[gml]motion_add(point_direction(x,y, mouse_x, mouse_y),1)[/gml]

EDICION:
Si no quieres usar la propiedad 'speed', y quieres modificar las coordenadas directamente, puedes usar

[gml]dir=point_direction(x,y, mouse_x, mouse_y) //apunta hacia el mouse
len=5 //cuanto vas a mover el objeto
x = x + lengthdir_x(len, dir)
y = y + lengthdir_y(len, dir)[/gml]




Espero que esto ayude :)

JMG.-
Título: Re: Codigo MoveToward
Publicado por: somnus en Febrero 03, 2011, 10:39:51 PM
bueno creo que no me di a entender

en gm ya los se utilizar, lo que pasa es que estoy utilizando otro lenguaje, por eso pedi ayuda para el codigo, no para como hacerse en GM...

te agradesco vere si me sirve lo que posteaste...

gracias
Título: Re: Codigo MoveToward
Publicado por: Masterkey en Febrero 03, 2011, 11:45:04 PM
Deber?as decir de que hablar, ya que nadie de aqu? puede adivinarlo..
Título: Re: Codigo MoveToward
Publicado por: jmgandalf en Febrero 04, 2011, 12:22:43 AM
Ah, bueno, ahi cambia la cosa  ;D

Se deben usar las funciones coseno y seno. Yo las usaba en los albores de los tiempos, hasta que descubri las lengthdir :P

Voy a desempolvar mis archivos a ver si encuentro las rutinas  :)
Título: Re: Codigo MoveToward
Publicado por: somnus en Febrero 04, 2011, 03:27:39 AM
Cita de: Masterkey en Febrero 03, 2011, 11:45:04 PM
Deber?as decir de que hablar, ya que nadie de aqu? puede adivinarlo..

claramente es tratar de hacer que el enemigo dispare a mi nave y que esa bala se vaya hacia la direccion donde esta mi nave Pricipal, pero como no lo hago en GM no puedo usar esa funcion.

por eso queria saber con cuales operaciones matematicas sacaba los grados, para hacer esa funcion

por otro lado me pondre a inversigar lo de seno y coseno

gracias gmandalf
Título: Re: Codigo MoveToward
Publicado por: Masterkey en Febrero 04, 2011, 03:42:24 AM
Cita de: somnus en Febrero 04, 2011, 03:27:39 AM
Cita de: Masterkey en Febrero 03, 2011, 11:45:04 PM
Deber?as decir de que hablar, ya que nadie de aqu? puede adivinarlo..

claramente es tratar de hacer que el enemigo dispare a mi nave y que esa bala se vaya hacia la direccion donde esta mi nave Pricipal, pero como no lo hago en GM no puedo usar esa funcion.

por eso queria saber con cuales operaciones matematicas sacaba los grados, para hacer esa funcion

por otro lado me pondre a inversigar lo de seno y coseno

gracias gmandalf
Cita de: somnus en Febrero 04, 2011, 03:27:39 AM
Cita de: Masterkey en Febrero 03, 2011, 11:45:04 PM
Deber?as decir de que hablar, ya que nadie de aqu? puede adivinarlo..

claramente es tratar de hacer que el enemigo dispare a mi nave y que esa bala se vaya hacia la direccion donde esta mi nave Pricipal, pero como no lo hago en GM no puedo usar esa funcion.

por eso queria saber con cuales operaciones matematicas sacaba los grados, para hacer esa funcion

por otro lado me pondre a inversigar lo de seno y coseno

gracias gmandalf
yo lo que digo es que deber?as especificar de que lenguaje de programaci?n hablas, aunque no s? nada aparte de gm creo que ningunos son iguales. Salu2
Título: Re: Codigo MoveToward
Publicado por: jmgandalf en Febrero 04, 2011, 03:47:13 AM
No pude encontrar mis rutinas, lo siento :(

Pero googleando encontre esto

private function getAngle(X1:Number, Y1:Number, X2:Number, Y2:Number):Number
{
var dir = radtoDeg(Math.atan2((Y2 - Y1), (X2 - X1)));
return dir;
}

private function radtoDeg(radians:Number):Number
{
var degrees = radians * 180/Math.PI;
return degrees;
}

private function getDistance(X1:Number, Y1:Number, X2:Number, Y2:Number):Number
{
var dist = Math.sqrt(Math.pow((X2 - X1), 2) + Math.pow((Y2 - Y1), 2));
return dist;
}

private function travel(mover:Object, speed:Number, dir:Number):void
{
var dx = speed * Math.cos(dir*Math.PI/-180);
var dy = speed * Math.sin(dir*Math.PI/-180);

mover.x += dx;
mover.y -= dy;
}


Esta en java, pero creo que se entiende bien, espero  :P

El resto esta aca:

http://www.kongregate.com/forums/4/topics/51230#posts-1149342


La funcion travel es la que hace la magia de mover el objeto hacia una direccion determinada.
Las otras funciones determinan el angulo hacia donde apuntar.

Espero que esto te sirva :)

JMG.-
Título: Re: Codigo MoveToward
Publicado por: Wadk en Febrero 04, 2011, 04:27:22 AM
En Python ser?a as?:
import math

def point_direction(x, y, x2, y2):
    if x == x2:
        return 90 + 180 * (y < y2)
    if y == y2:
        return 180 * (x > x2)
    return 180 * (x2 < x and y2 < y or x2 < x and y2 > y) + math.degrees(math.atan((y2 - y) / (x - x2)))

def lengthdir_x(len, dir):
    return math.cos(math.radians(dir)) * len

def lengthdir_y(len, dir):
    return math.sin(math.radians(dir)) * -len

Y despu?s, para usarlo:
direction = point_direction(x, y, xx, yy)
x += lengthdir_x(speed, direction)
y += lenghtdir_y(speed, direction)

Ahhh, como me gusta el Python. Si fuera una mujer, me casar?a con ella.

Pero bueno, este foro es de Game Maker, lo siento pero tengo que cerrar el tema.
Busc? en internet, en otros lenguajes se usa mucho una funci?n as?, deber?a estar lleno de informaci?n. Si no encontr?s nada pod?s preguntar en un sitio como Stack Overflow (http://www.stackoverflow.com/).