Noticias

Se ha publicado un nuevo servicio, el Portal de Juegos Online

Comunidad Game Maker

Bienvenid@ a la comunidad hispana de Game Maker. Nuestro objetivo es crear videojuegos y dar soporte en castellano de GM. Para mejorar nuestro servicio hemos implantado, como adicion al reglamento general, algunas normas especificas en los subforos más comunes. ¡No olvides informarte antes de participar!.

Autor Tema: Obtener posición de adjuntado  (Leído 3286 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Jucarave

  • Ganador Proyecto Nexo
  • Adicto
  • *
  • Puntos: 439
  • Mensajes: 497
  • Agradecido: 36 veces
  • Sexo: Masculino
  • De regreso con un nuevo proyecto
    • Ver Perfil
    • Jucarave Games
en: Febrero 07, 2016, 04:31:34 am
Hola a todos, este es un script que ya había presentado en una respuesta de una pregunta, pero hoy preguntaron algo similar así que decidí hacer un script oficial (o algo así):

Autor: Jucarave
Versión de GM utilizada: Game Maker Studio (aunque debería funcionar al menos en :GM8:)
Descripción: Obtiene la posición absoluta 'x' y 'y' a la cual se debe crear o dibujar un objeto que se quiere adjuntar a otro, por ejemplo: supongamos que tenemos un persoanje visto desde arriba y su sprite esta en el centro de su cabeza, el tiene un arma y el cañón se encuentra en una posición diferente del sprite (Revisar attachment 1)

Códigos:

Primero el script
/* 
* get_attachment_position(x, y, x_offset, y_offset, sprite_angle);
*
* argument[0]: Posición x del objeto
* argument[1]: Posición y del objeto
* argument[2]: Posición x del adjunto relativa al origen del objeto
* argument[3]: Posición y del adjunto relativa al origen del objeto
* argument[4]: Angulo del objeto (en grados)
*
* returns: array con la posición del adjunto: [x, y]
*/

var _x, _y, _sx, _sy, _ang, _ca, _sa, attach_x, attach_y, ret;

_x = argument[0];
_y = argument[1];
_sx = argument[2];
_sy = argument[3];
_ang = degtorad(argument[4]);

_cos = cos(_ang);
_sin = sin(_ang);

ret[0] = _x + _sx * _cos + _sy * _sin;
ret[1] = _y + _sy * _cos - _sx * _sin;

return ret;

Ahora simplemente para usarlo (utilizando la imagen de referencia del adjunto) vamos a crear un misil en la posición del cañón:

// Evento clic del mouse

// Obtenemos la posición donde crear el misil
var missil_position = get_attachment_position(x, y, 36, 13, image_angle);

// Creamos el misil
instance_create(missil_position[0], missil_position[1], obj_misil);

Este script también puede ser utilizado cuando queremos dibujar cosas relativas a una posición  (por ejemplo dibujar el arma en la posición de la mano del jugador) y básicamente cualquier caso en el que tengamos que hacer uso de posiciones relativas cuando nuestro sprite pueda cambiar su angulo de imagen.

Saludos.
« última modificación: Febrero 08, 2016, 12:17:06 pm por Jucarave »

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

 


No Tienes Permisos Para Dar Puntos
point 22 Puntos

Usuarios que puntuaron el tema » 3dgeminis (10 Pts) » zorge (7 Pts) » gabyT (5 Pts) 


Desconectado zorge

Respuesta #1 en: Abril 05, 2016, 02:04:31 am
ya se que es un gran trabajo pero como debería usarlo eso que pones lo meto en el game maker en un script y luego lo llamo desde el evento step?disculpa mi ignorancia pero es que lo estoy intentando y no encuentro la manera de hacerlo funcionar......me sale un error en la linea 4 pos 24 Unknown fuction or script : get_attachment_position
« última modificación: Abril 05, 2016, 02:17:17 am por zorge »

 


Desconectado Clamud

Respuesta #2 en: Abril 05, 2016, 05:18:12 pm
Si, debes copiar el código a un script, y puedes darle el nombre que sugiere Jucarave, u otro nombre si lo prefieres. Y se usa en el evento Step, para calcular la posición de la punta del cañón antes de disparar.

El script no funciona en GM8.1, y versiones previas, porque no pueden devolver un array.