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.
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.