Enero 27, 2016, 05:35:47 PM Ultima modificación: Enero 28, 2016, 10:09:02 PM por Chrissatan
Hola a todos en la comunidad game maker:
tengo un problema desde hace mucho tiempo, estoy desarrollando un juego de naves, y quiero que esta nave tenga varios cañones que apunten independientemente a la posicion del mouse, y a su ves que tengan una restriccion de angulo, y que esten en diferentes posiciones de  la nave, no asi en el centro como en los juegos de tanques donde la torreta esta en el centro, necesito que esten en los costados de la nave, sin perder el movimiento de la nave, pero hasta ahora con solo el uso de sprites, no he conseguido lograrlo, asi que quiero hacerlo mediante huesos para que los cañones respeten su propio centro, pero no manejo muy bien el tema de controladores de movimiento en los huesos, ya que no tiene que tener una animacion predefinida en Spine...

porfavor si alguien puede ayudarme con este problema lo agradecere mucho.

Bastaría con utilizar image_angle y point_direction o utilizar las funciones lengthdir


aplicando lo que dice  Ynfiniti, image_angle = point_direction(x,y,mouse_x,mouse_y);
[spoiler="ola k ase clickarme o k ase"]la imagen no se quita xD
[/spoiler]

#4 Enero 27, 2016, 08:11:59 PM Ultima modificación: Enero 27, 2016, 08:14:16 PM por Darkerman
Cita de: kostra en Enero 27, 2016, 06:32:15 PM
aplicando lo que dice  Ynfiniti, image_angle = point_direction(x,y,mouse_x,mouse_y);
Rayos yo iba a decir eso pero llegue tarde :v
A pero si vas a usar cañones debes pone el punto de origen en la base del cañon

Buenas,
Según lo que leí, el no quiere hacer algo tan "sencillo". Lo que él quiere hacer es poner varios cañones en diferentes posiciones de la nave, algo así:


No me voy a poner a explicarlo, algo inusual en mí (pero es que estoy comiendo xD), así que sólo dejaré adjunto un pequeño ejemplo que hice hace no mucho :B
alaberga regué el café.

BA:STFW&RTFM

Cita de: NiuWeb en Enero 27, 2016, 08:32:59 PM
Buenas,
Según lo que leí, el no quiere hacer algo tan "sencillo". Lo que él quiere hacer es poner varios cañones en diferentes posiciones de la nave, algo así:


No me voy a poner a explicarlo, algo inusual en mí (pero es que estoy comiendo xD), así que sólo dejaré adjunto un pequeño ejemplo que hice hace no mucho :B

Mucahas gracias a todos por responder tan rapido, y gracais por los ejemplos y es exacto eso es lo que necesito, pero la dificultad radica en darle movimiento libre a la nave con los crusores, y no perder la posicion de los cañones en la nave, que los cañones giren, y la nave pueda desplasarse y que todo nave y cañones sigan siendo un personaje unido, intente con todo y aun no logro que los cañones se mantengan dentro de la nave, mientras se mueve la nave con los crusores.

#7 Enero 27, 2016, 08:53:45 PM Ultima modificación: Enero 27, 2016, 09:03:35 PM por NiuWeb
Bueno, es exactamente lo mismo. Dale movimiento a esa nave del ejemplo que te mandé y verás que los cañones se le quedan pegados xD
Y por si a lo que te refieres es lo que estoy pensando que es a lo que te refieres, estoy modificando el ejemplo para que lo veas mejor, así que atento a este mismo mensaje porque lo editaré y adjuntaré el ejemplo en este mismo mensaje, para no hacer flood :B

EDIT: Ya, te dejo adjunto el mega-ejemplo :B
EDIT 2: Se me olvidava, mueve la navecita con S-W-A-D :v
alaberga regué el café.

BA:STFW&RTFM

Cita de: NiuWeb en Enero 27, 2016, 08:53:45 PM
Bueno, es exactamente lo mismo. Dale movimiento a esa nave del ejemplo que te mandé y verás que los cañones se le quedan pegados xD
Y por si a lo que te refieres es lo que estoy pensando que es a lo que te refieres, estoy modificando el ejemplo para que lo veas mejor, así que atento a este mismo mensaje porque lo editaré y adjuntaré el ejemplo en este mismo mensaje, para no hacer flood :B

Exlente si se quedan con la nave, quiza yo estoy colocandole un movimiento erroneo, estoy utilizando este tipo de desplasamiento:

if(keyboard_check(vk_left)) {image_angle+=4};
if(keyboard_check(vk_right)) {image_angle-=4};

if(keyboard_check(vk_up))
{
x+=cos(degtorad(image_angle))*4;
y-=sin(degtorad(image_angle))*4;
}
if(keyboard_check(vk_down))
{
x+=cos(degtorad(image_angle))*-2;
y-=sin(degtorad(image_angle))*-2;
}

y los cañones no giran conjuntamente con la nave, quiza tendria que utilizar otro tipo de movimiento pero la idea es que como en el espacio la nave pueda mirar en todas direcciones para apuntar a otros objetos y asi tener algo mas de realidad en el juego...

Ah, vale, es que no lo hice para que se pegaran a la nave con un movimiento que la hace rotar  :-X
Dale una mirada al segundo ejemplo que te adjunté (en el mensaje anterior), y quizás te dé una idea de como hacerle.
Por ejemplo, en los cañones podrías poner:
[gml]
if (oNave.image_angle) <= 90 and (oNave.image_angle) >=0
{
   x = oNave.x + (90 - (oNave.image_angle));
}
[/gml]

Lo cual hará que, por ejemplo, si está a 90º, el cañon esté fijo en la posicion x de la nave, y si está a menos de 90º, el cañon aumente su posicion para quedar pegado a la nave, algo así:


Más no te puedo ayudar, porque veo que estás usando cosas complejas como sin(), cos() y degtorad(), y yo de eso no sé nadita  XD :-[
alaberga regué el café.

BA:STFW&RTFM

#10 Enero 27, 2016, 09:23:35 PM Ultima modificación: Enero 27, 2016, 09:28:44 PM por Jucarave
Hola,

Lo que necesitas para girar la nave y que los cañones giren con la nave y luego giren independientemente es utilizar matrices de rotación, se que game maker tiene unas funciones para manejarlas en 3D (no se si en 2D), te haría un ejemplo (o dibujos) también pero no estoy en mi casa :-[

Sin embargo funciona algo así:

supongamos que el sprite de la nave esta mirando normalmente hacia la derecha (angulo 0) lo mismo que los cañones (así podemos girar normalmente sin tener que cambiar giros)

ahora, digamos que el sprite de la nave esta en su centro (que digamos por ahora es x:16px, y:16px) y digamos que el cañon se encuentra a 8px horizontalmente  y 6px verticalmente de la nave entonces:

[gml]
// Dibuja la nave centrada
draw_sprite_ext(spr_nave, 0, x, y, 1, 1, angulo_nave_en_grados, c_white, 1);

//Dibuja el cañon con ofset del centro de la nave
draw_sprite_ext(spr_cannon, 0, x+8, y+6, 1, 1, angulo_cannon_en_grados, c_white, 1);
[/gml]

Ahora el problema es que si giramos la nave (y el cañon) este no se va a quedar en su sitio, por eso necesitamos hacer una pequeña matriz de rotación para obtener su posición relativa (si de aquí a que llegue a mi casa no te han solucionado esto te hago un script mucho mejor :P )

basicamente estamos dibujando el cañon en x+8, y+6 ahora vamos a cambiar eso:

[gml]
// No estoy 100% seguro que sea así, no tengo como probarlo ahora pero la idea es esta:
var cannon_x = x + 8 * cos(angulo_nave_en_radianes) + 6 * sin(angulo_nave_en_radianes);
var cannon_y = y + 6 * cos(angulo_nave_en_radianes) - 8 * sin(angulo_nave_en_radianes);

// Dibuja la nave centrada
draw_sprite_ext(spr_nave, 0, x, y, 1, 1, angulo_nave_en_grados, c_white, 1);

//Dibuja el cañon con ofset del centro de la nave
draw_sprite_ext(spr_cannon, 0, cannon_x, cannon_y, 1, 1, angulo_cannon_en_grados, c_white, 1);
[/gml]

Y esto debería solucionar tu dilema ???

en fin, si ahora no esta listo te hago el ejemplo 8)

Saludos

EDIT: un pequeño cambio en el cálculo

Checa mi canal de Youtube para tutoriales y charlas sobre desarrollo de videojuegos.


Cita de: Jucarave en Enero 27, 2016, 09:23:35 PM
Hola,

Lo que necesitas para girar la nave y que los cañones giren con la nave y luego giren independientemente es utilizar matrices de rotación, se que game maker tiene unas funciones para manejarlas en 3D (no se si en 2D), te haría un ejemplo (o dibujos) también pero no estoy en mi casa :-[

Sin embargo funciona algo así:

supongamos que el sprite de la nave esta mirando normalmente hacia la derecha (angulo 0) lo mismo que los cañones (así podemos girar normalmente sin tener que cambiar giros)

ahora, digamos que el sprite de la nave esta en su centro (que digamos por ahora es x:16px, y:16px) y digamos que el cañon se encuentra a 8px horizontalmente  y 6px verticalmente de la nave entonces:

[gml]
// Dibuja la nave centrada
draw_sprite_ext(spr_nave, 0, x, y, 1, 1, angulo_nave_en_grados, c_white, 1);

//Dibuja el cañon con ofset del centro de la nave
draw_sprite_ext(spr_cannon, 0, x+8, y+6, 1, 1, angulo_cannon_en_grados, c_white, 1);
[/gml]

Ahora el problema es que si giramos la nave (y el cañon) este no se va a quedar en su sitio, por eso necesitamos hacer una pequeña matriz de rotación para obtener su posición relativa (si de aquí a que llegue a mi casa no te han solucionado esto te hago un script mucho mejor :P )

basicamente estamos dibujando el cañon en x+8, y+6 ahora vamos a cambiar eso:

[gml]
// No estoy 100% seguro que sea así, no tengo como probarlo ahora pero la idea es esta:
var cannon_x = x + 8 * cos(angulo_nave_en_radianes) + 6 * sin(angulo_nave_en_radianes);
var cannon_y = y + 6 * cos(angulo_nave_en_radianes) - 8 * sin(angulo_nave_en_radianes);

// Dibuja la nave centrada
draw_sprite_ext(spr_nave, 0, x, y, 1, 1, angulo_nave_en_grados, c_white, 1);

//Dibuja el cañon con ofset del centro de la nave
draw_sprite_ext(spr_cannon, 0, cannon_x, cannon_y, 1, 1, angulo_cannon_en_grados, c_white, 1);
[/gml]

Y esto debería solucionar tu dilema ???

en fin, si ahora no esta listo te hago el ejemplo 8)

Saludos

EDIT: un pequeño cambio en el cálculo

WOW, estoy en pos de probar, pero si seria bueno el ejemplo, y tenerlo en el post para que otros con una duda similar puedan acceder al recurso, si logro hacer que funcione lo subo igual ya que este juego tiene una espectativa de programacion avanzada, muchas gracias por responder...

#12 Enero 28, 2016, 04:56:30 AM Ultima modificación: Enero 28, 2016, 05:30:11 AM por Jucarave
Aquí esta el ejemplo que había prometido (al final la ecuación que te dí si estaba correcta :P ) lo interesante esta en el script "fix_position", te mueves con WASD y los cañones apuntan directamente al mouses

Saludos 8)

Checa mi canal de Youtube para tutoriales y charlas sobre desarrollo de videojuegos.


Cita de: Jucarave en Enero 28, 2016, 04:56:30 AM
Aquí esta el ejemplo que había prometido (al final la ecuación que te dí si estaba correcta :P ) lo interesante esta en el script "fix_position", te mueves con WASD y los cañones apuntan directamente al mouses

Saludos 8)

:D :D Exacto eso es lo que necesitava, ya estaba mucho tiempo trabado en esto, muchas gracias a todos por responder y por los ejemplos que ya se quedan para uso de recurso para los que tengan el mismo problema, y pronto lo tender el juego completo en el servidor para que puedan disfrutarlo

y para que queden aun más a mano para los futuros que tengan el mismo problema, ayuda que editarás el primer post poniéndo la etiqueta [Solucionado] al principio del título :B
[spoiler="ola k ase clickarme o k ase"]la imagen no se quita xD
[/spoiler]