Febrero 07, 2016, 04:31:34 AM Ultima modificación: Febrero 08, 2016, 12:17:06 PM por Jucarave
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
[gml]
/*
* 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;
[/gml]

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

[gml]
// 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);
[/gml]

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.

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


#1 Abril 05, 2016, 02:04:31 AM Ultima modificación: Abril 05, 2016, 02:17:17 AM por zorge
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

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.