Mayo 15, 2014, 11:56:17 PM Ultima modificación: Mayo 16, 2014, 11:39:07 AM por djboro88
Hola a tod@s de nuevo !!
He estado intentando crear objetos aleatorios con una velocidad de desplazamiento aleatoria, pero ni consigo que aparezcan en un orden aleatorio.
He hecho un croquis para que se entienda mejor:




  • Tenemos 3 objetos (cada uno con un sprite distinto), pueden ser 3 o 4, 5, 6, 7...
  • Hay 4 pistas y por cada una de esas pistas, deben de pasar los objetos de forma aleatoria a una velocidad determinada (4, 8, 12, 16...)
  • Las flechas indican hacia q sentido se deben de mover los objetos (derecha, izquierda, derecha, izquierda)

El tema principal, es como crear los objetos de una forma aleatoria y q aparezcan por las coordenadas especificadas X, Y.

¿Alguien me puede ayudar?
Saludos y gracias !!

#1 Mayo 16, 2014, 12:06:00 AM Ultima modificación: Mayo 16, 2014, 12:07:51 AM por penumbra
randomize()
instance_create(x, y, choose(obj_1, obj_2, obj_3))

para la velocidad aleatoria:
hspeed = irandom_range(vel_min, vel_max)

#2 Mayo 16, 2014, 12:08:54 AM Ultima modificación: Mayo 16, 2014, 12:11:03 AM por djboro88
Me crea el objeto, pero no se mueve hacia ningun lado ni a ninguna velocidad.
¿Cómo se cambia la velocidad y que se mueva hacia alguna lado en GML?

He puesto:
hspeed = irandom_range(4, 16)

Y no se mueve hacia ningun lado.

Cita de: djboro88 en Mayo 16, 2014, 12:08:54 AM
He puesto:
hspeed = irandom_range(4, 16)

Y no se mueve hacia ningun lado.

Ese código de hspeed debe ir en el evento CREATE de cada uno de los objetos que quieres crear. ¿Así lo tienes?

OK !!
El problema surje cuando kiero ponerlo de derecha a izquierda, que no aparecen.
Solo funciona de de izquierda a derecha.

Os adjunto el archivo GMZ para que lo probeis vosotros mismos y ver lo q ocurre.
Solo funciona de izquierda a derecha, pero al contrario no.

#6 Mayo 16, 2014, 09:16:15 AM Ultima modificación: Mayo 16, 2014, 09:18:55 AM por djboro88
En los objetos he puesto:

if(mover == 1){ direction = 0; }
if(mover == 2){ direction = 180; }

hspeed = irandom_range(4, 16)


Y en el objeto que los crea aleatoriamente los izquierda a derecha:
var mover;
mover = 1;

instance_create(0, 112, choose(obj_coche1, obj_coche2, obj_coche3))



Y en el objeto que los crea aleatoriamente los derecha a izquierda:
var mover;
mover = 2;

instance_create(1008, 176, choose(obj_coche1, obj_coche2, obj_coche3))


Pero me lanza un error.
############################################################################################
FATAL ERROR in
action number 1
of Create Event
for object obj_coche2:

Push :: Execution Error - Variable Get -1.mover(100020, -1)
at gml_Object_obj_coche2_Create_0 (line 1) - if(mover == 1){ direction = 0; }
############################################################################################




¿Alguna ayuda?

El objeto problemático era el obj_crea2

Este es el código que va en [CREATE]

randomize()
cochesin = instance_create(1008, 176, choose(obj_coche1, obj_coche2, obj_coche3))
cochesin.hspeed = irandom_range(-4, -16)


Lo único importante, y que había olvidado comentarte, es que instance_create() devuelve el id de la instancia que se crea, y este id lo puedes guardar en una variable, y así ajustar la hspeed de esa instancia recién creada, tal como indica la tercer línea del código

Las mismas tres líneas de código van en el evento alarma del obj_crea2. Así lo hice y ya se crean los coches avanzando de derecha a izquierda

#8 Mayo 16, 2014, 09:53:58 AM Ultima modificación: Mayo 16, 2014, 11:37:27 AM por djboro88
OK, muchas gracias !!
Funciona 100% perfecto

#9 Mayo 16, 2014, 11:39:00 AM Ultima modificación: Mayo 16, 2014, 12:00:26 PM por djboro88
Una consulta mas sobre esto...
Para darle la vuelta al sprite he visto que se hace con sprite_index.

En el objeto crea2 pongo lo siguiente:
cochesin.image_index = 180;

Pero no da la vuelta. ¿Que hago mal?

Solucionado !!
cochesin.image_xscale = -1