Buenas. Quiero hacer que un objeto de vueltas alrededor de otro.

se mover el objeto quieto que de vueltas solo
en create:
direction = 0
vspeed = 1
en paso:
direction = direction + 1

pero lo q no se es hacer que el objeto de vueltas alrededor de otro.

gracias sois de mucha ayuda

#1 Enero 24, 2020, 02:44:19 AM Ultima modificación: Enero 24, 2020, 02:46:10 AM por BssString
Hola towers

Crea una variable en el objeto quieto que controle el ángulo en el que se ubicará el segundo objeto respecto de él y una variable que controle la distancia, luego lo posicionas calculando el vector. Puedes usar las funciones trigonométricas "seno" o "coseno" o puedes usar las funciones integradas de GM "lengthdir".

Como ejemplo yo he creado la variable "angle"

En el create event:
[gml]angle = 0;[/gml]

Ahora en el Step de ese mismo objeto que está quieto, modificas la posición del segundo objeto.
[gml]var distancia = 80; //Este valor equivale al radio que forma la órbita del segundo objeto, usando el objeto quieto como centro
segundo.x = x + lengthdir_x(distancia,angle);
segundo.y = y + lengthdir_y(distancia,angle;
angle += 6 //la cantidad que quieras incrementar al ángulo por cada STEP[/gml]

Yo he llamado el objeto como "segundo", tú llámalo como quieras.
Si tienes 2 o más objetos llamados "segundo", deberás usar el Instance ID en lugar del Object Index para poder modificar la posición de sólo uno de los objetos.

Ojo: Favor notar que las distancias las calcula en función de los puntos de origen que le hayas asignado al Sprite.
Si los sprites tienen su origen en el centro, entonces lo verás bien, pero si tienen su origen en el x=0; y=0, entonces los verás un poco corridos hacia el lado, tendrás que sumarle algunos pixeles de offset para corregir la posición.

Saludos

Tio eres un genio!!!!

Lo que necesito de momento son  dos objetos "drones"  que roten alrededor del objeto principal "nave" la parte de "Si tienes 2 o más objetos llamados "segundo", deberás usar el Instance ID en lugar del Object Index para poder modificar la posición de sólo uno de los objetos". No la entiendo

y el mounstro final de esta fase va a tener minimo 20 drones alrededor.....

Hola towers

El Instance Id es un número único que Game Maker le asigna a cada objeto que creas en la room, comenzando desde 100000 hacia adelante (suma 1 por cada objeto nuevo que se crea en la room). Este número lo asigna tanto para objetos creados directamente desde el editor de rooms y los creados mediante las funciones instance_create (GMS 1.4) o instance_create_layer/instance_create_depth (GMS 2).

Si tu objeto se llama "obj_dron" y pusiste dos en la room, ellos comparten el mismo "object_index" que es "obj_dron", pero ambos tendrán un "instance ID" diferente,. El dron que se creó primero se llamará por ejemplo "100001" y el otro se llamará "100002".

Si usas el object index en un código
[gml]obj_dron.x = 100[/gml]
Todos los objetos "obj_dron" de la room se verán afectados.

Si en cambio usas el ID:
[gml]100001.x = 100[/gml]
Entonces sólo el objeto de ID 100001 se moverá al lugar indicado.

Mi recomendación es que NO crees los drones directamente en la room, sino que uses alguna de las funciones de "instance_create" para así poder conocer con facilidad el ID del objeto que estás creando y poder manipularlo.

Un ejemplo de lo que te comento sería esto, en el Create Event:
[gml]dron_primero = instance_create(100,100,obj_dron)
dron_segundo = instance_create(100,50,obj_dron)[/gml]
Ese código crea dos Drones en la room, y guarda sus ID en las variables "dron_primero" y "dron_segundo" (yo usé esos dos nombres para las variables como ejemplo pero tu las puedes llamar como quieras).

Ahora para manipularlos, simplemente usas la variable que creaste antes:
[gml]dron_primero.x = 100 //Esto cambia la "X" del primer dron solamente, sin afectar al segundo.
dron_segundo.x = 50 //Esto cambia la "X" del segundo dron.[/gml]

Y ya puedes manipular a cada dron por separado.

Si debes editar la posición de 30 drones, te recomiendo averiguar algo sobre "arrays" y "loops" (idealmente el "for" loop), porque crear 30 variables y repetir el código 30 veces para manipular los drones va a ser un caos.

Saludos