Hola a todos!
Hace tiempo que no posteo una duda, y bueno, aca me tienen ^^
He hechos varios juegos en Top-View y siempre me quedo la duda de como hacer el movimiento lateral.
Osea, esta el movimiento de rotar y avanzar, pero como es el movimiento lateral?
Creo que en el 3D se usa igual, ya que se programa en Top-View (Hablando de shooter).
Desde ya muchas gracias!
Saludos!
creo que seria cuestion de ponerse a pensar! y tambien cuenta el engine que usas!
por ejemplo:
si usas esto para los movimientos
[gml]if keyboard_check(ord("W"))
{image_angle=90 y-5}[/gml]
avanzar hacia arriba
[gml]if keyboard_check(ord("S"))
{image_angle=270 y+5}[/gml]
avanzar hacia abajo
supongo yo que tendrias que poner predeterminadamente una tecla para caminar hacia al lado!
[gml]if keyboard_check(ord("D"))
if image_angle=90
{x+5}[/gml]
avanzar hacia al lado derecho
[gml]if keyboard_check(ord("D"))
if image_angle=180
{y-5}[/gml]
avanzar hacia al lado derecho pero cuando esta mirando hacia la izquierda
osea que avanzara asia arriba pero mirando hacia la derecha
espero te ayude con eso! solo es cuestion de colocar los image_angle correctos para saver hacia donde mira el personaje! :-[
Saludos!
No no, no se entendio. Ahi hago un ejemplo para que se entienda.
Ademas me parece que usando "speed" es la mejor opcion, se pueden hacer mejores efectos de movimiento.
Edito: Aca esta el engine.
PD: Seguro que con pensar un poco lo saco, pero veo tan sola que CGM, que quiero revivirla un poco :/
if keyboard_check(ord("X"))
{
var xn,yn;
xn = x + sin(direction*pi/180);
yn = y + cos(direction*pi/180);
if place_free(xn,yn)
{ x = xn; y = yn; }
}
//camina en lateral right
if keyboard_check(ord("Z"))
{
var xn,yn;
xn = x - sin(direction*pi/180);
yn = y - cos(direction*pi/180);
if place_free(xn,yn)
{ x = xn; y = yn; }
}
//lateral left
Lo que hace es que reposici?n X,Y seg?n la longitud y direcci?n.
Cita de: MaanuRP en Diciembre 03, 2011, 12:46:17 AM
No no, no se entendio. Ahi hago un ejemplo para que se entienda.
Ademas me parece que usando "speed" es la mejor opcion, se pueden hacer mejores efectos de movimiento.
por eso digo! hay muchas maneras de hacer un Top-View y mas si es shooter! :-[ yo uso speed para los movimientos solo coloque los axis (x-y) como ejemplo! yo uso ese gml que copie! para mis shooters de top-view
Cita de: elviskelley en Diciembre 03, 2011, 12:48:52 AM
if keyboard_check(ord("X"))
{
var xn,yn;
xn = x + sin(direction*pi/180);
yn = y + cos(direction*pi/180);
if place_free(xn,yn)
{ x = xn; y = yn; }
}
//camina en lateral right
if keyboard_check(ord("Z"))
{
var xn,yn;
xn = x - sin(direction*pi/180);
yn = y - cos(direction*pi/180);
if place_free(xn,yn)
{ x = xn; y = yn; }
}
//lateral left
Eso mismo ^^
Como puedo hacer para que se mueva mas rapido?
Y si no te molesta, me podrias explicar linea por linea como funciona?
xn = x + sin(direction*pi/180)*X;
multiplica por X a la derecha de todos los senos y cosenos, donde X es un numero, 1 no hace nada, 2 el doble de rapido, 3 triple, etc
Eso es debido a que sin devuelve el seno, Por ej, si el angulo fuera 0?, el cos(0?)=1 y el sin(0?)=0, conque se mover?a hacia la DERECHA UN PIXEL. O sea, si lo mantienes pulsado, en un segundo, que son 30 steps, se habria movido 30 pixeles solamente. Conque los sin y cos devuelven senos y cosenos, que NUNCA SUPERAN 1. Por lo que si multiplicas EL RESULTADO DEL SIN Y COS por un numero, aumentas la velocidad, simplemente. Haces que se desplace m?s distancia.
Ese c?digo es el que viene de ejemplo en el juego 3D de game maker, que al fin y al cabo es un juego de vista topview en mec?nica ^^
Y yo tengo una duda similar, hacer esto pero aplicarlo al movimiento adelante y atr?s xD
Saldria mejor usar las funciones lengthdir_x y lengthdir_y en vez de sacar senos y cosenos, asi se ejecutaria mas rapido el codigo sin tantos calculos, ya que estas funciones lo hacen por si solo.
Cita de: DarkKRuleR en Diciembre 05, 2011, 10:57:03 AM
xn = x + sin(direction*pi/180)*X;
multiplica por X a la derecha de todos los senos y cosenos, donde X es un numero, 1 no hace nada, 2 el doble de rapido, 3 triple, etc
Eso es debido a que sin devuelve el seno, Por ej, si el angulo fuera 0?, el cos(0?)=1 y el sin(0?)=0, conque se mover?a hacia la DERECHA UN PIXEL. O sea, si lo mantienes pulsado, en un segundo, que son 30 steps, se habria movido 30 pixeles solamente. Conque los sin y cos devuelven senos y cosenos, que NUNCA SUPERAN 1. Por lo que si multiplicas EL RESULTADO DEL SIN Y COS por un numero, aumentas la velocidad, simplemente. Haces que se desplace m?s distancia.
Ese c?digo es el que viene de ejemplo en el juego 3D de game maker, que al fin y al cabo es un juego de vista topview en mec?nica ^^
Y yo tengo una duda similar, hacer esto pero aplicarlo al movimiento adelante y atr?s xD
Para delante y para atras es solo darle velocidad, si tu haces que:
direction = point_direction(x,y,mouse_x,mouse_y)
Y
image_angle = direction
Con lo que solo darle velocidad ya se va a mover hacia adelante y hacia atras, para que hacer calculos y todo? xD
Cita de: kakashigna en Diciembre 05, 2011, 02:02:28 PM
Saldria mejor usar las funciones lengthdir_x y lengthdir_y en vez de sacar senos y cosenos, asi se ejecutaria mas rapido el codigo sin tantos calculos, ya que estas funciones lo hacen por si solo.
No te puedo contestar porque nunca use esas funciones.
Acabo de ver algo que no me gusto.
Yo uso: direction = point_direction(x,y,mouse_x,mouse_y) para que dispare y se mueva para el mouse, creo que eso esta bien.
Pero con ese script el personaje no se mueve a la derecha o a la izquierda, sino que rota alrededor de ese punto. Lo que yo queria era que vaya para la derecha o para la izquierda pero recto.
O el script se usa de otra manera, o yo estoy equivocado al usar direction = point_direction(x,y,mouse_x,mouse_y).
Porque cuando se juegan juegos en 3D, el personaje no rota con respecto a su objetivo, sino que se mueve a la derecha o a la izquierda.
En que, de todo lo que dije, estoy equivocado? xD
Gracias a todos por la ayuda!
Cita de: MaanuRP en Diciembre 06, 2011, 06:35:24 AM
Acabo de ver algo que no me gusto.
Yo uso: direction = point_direction(x,y,mouse_x,mouse_y) para que dispare y se mueva para el mouse, creo que eso esta bien.
Pero con ese script el personaje no se mueve a la derecha o a la izquierda, sino que rota alrededor de ese punto. Lo que yo queria era que vaya para la derecha o para la izquierda pero recto.
O el script se usa de otra manera, o yo estoy equivocado al usar direction = point_direction(x,y,mouse_x,mouse_y).
Porque cuando se juegan juegos en 3D, el personaje no rota con respecto a su objetivo, sino que se mueve a la derecha o a la izquierda.
En que, de todo lo que dije, estoy equivocado? xD
Gracias a todos por la ayuda!
Eso suele pasar cuando la vista esta quieta, ya que no se puede mover con el personaje y mucho menos con el mouse...
Para arreglar eso, tienes que hacer que la vista no se pare nunca y que siempre este en la misma posici?n (relativa) al personaje.
Es algo muy l?gico lo que te pasa: el personaje se mueve y vuelve a mirar al mouse, y por eso gira en torno a el, por que siempre lo mira.
Saludos
Si si, eso lo probe, pero cuando llega al final de room (Que la camara ya no se movera mas) el movimiente vuelve a ser circular.
Esto significa que eso solo se puede hacer en 3D? (O solo este metodo sirve para 3D)
Cita de: MaanuRP en Diciembre 06, 2011, 06:12:54 PM
Si si, eso lo probe, pero cuando llega al final de room (Que la camara ya no se movera mas) el movimiente vuelve a ser circular.
Esto significa que eso solo se puede hacer en 3D? (O solo este metodo sirve para 3D)
Pues si no te quieres complicar la vida creando las vistas tu mismo... Entonces es sugerible que lo hagas en 3D, puedes usar la vista ortogonal y ya con eso lo sigues teniendo en 2D pero eliminando el factor de las vistas.
Saludos.
De 3D todavia no se nada, asi que me limito a hacer las cosas en 2D jajaj. Voy a ver que hago entonces.
Bueno, tema resuelto, total el script ya me lo dieron, gracias a todos!