Hola como están tenia esta duda daré un ejemplo: si tengo 20 manzanas y al comenzar una se vuelve verde y en cada 20 segundos otra manzana se convierte en verde
No se si me explique :-[
¿Las manzanas cambiarán en orden aleatorio?
si que cambien en orden aletorio
Este es un método que usa una lista y la función instance_find.
En un objeto controlador, en el evento Create, se crea una lista de números aleatorios y se inicializa una alarma:
[gml]
lista = ds_list_create(); //crear lista
for( i=0; i<20; i++ ) ds_list_add( lista, i ); //agregar números del 0 al 19
ds_list_shuffle( lista ); //desordenar los números
k = 0; //variable para contar las manzanas que se han cambiado
alarm[0] = 20 * room_speed; //contar 20 segundos
[/gml]
Se supone que las instancias del objeto manzana no se van creando ni destruyendo, ya están ahí cuando inicia la room.
Después en el evento Alarm0 del objeto controlador se cambia de color a una manzana:
[gml]
n = ds_list_find_value( lista, k ); //leer un número de la lista
instancia = instance_find( obj_manzana, n ); //obtener el id de una manzana aleatoria
instancia.sprite_index = spr_verde; //cambiar el sprite de esa manzana
k++; //incrementar el contador
if( k < 20 ) //si el contador es menor al total de manzanas
alarm[0] = 20 * room_speed; //contar otros 20 segundos
[/gml]
Aquí se cambia el srpite de la manzana, pero se pueden usar vario métodos para hacer lo mismo, como cambiar la variable image_index, cambiar image_blend o usar otra variable personalizada.
Eso es todo, hasta luego.
Gracias me funciono :)
Aquí está otra versión con menos variables.
[gml]
///Evento Create
lista = ds_list_create();
with( obj_manzana ) ds_list_add( other.lista, id );
ds_list_shuffle( lista );
k = 0;
alarm[0] = 20 * room_speed;
[/gml]
[gml]
///Evento Alarm0
(ds_list_find_value( lista, k )).sprite_index = spr_verde;
k++;
if( k < 20 ) alarm[0] = 20 * room_speed;
[/gml]
al usar el script digamos que al apretar leth pressed tiene la explosion de la manzana roja no de la verde :-[
explosion digamos el final de la animacion
Con éstos códigos se pueden cambiar las instancias de un objeto, cuyo número cambia, por instancias de otro objeto de forma aleatoria. Se usa el mismo principio que en las versiones anteriores, pero esta vez la lista se actualiza en el evento Alarm0.
[gml]
///Create
lista = ds_list_create(); //crear lista
alarm[0] = 20 * room_speed; //contar 20 segundos
[/gml]
[gml]
///Alarm0
if( instance_number(obj_manzana1) > 0 ) //si hay instancias que cambiar
{
ds_list_clear( lista ); //limpiar lista
with( obj_manzana1 ) ds_list_add( other.lista, id ); //actualizar lista
ds_list_shuffle( lista ); //desordenar elementos de la lista
with( ds_list_find_value(lista,0) ) instance_change( obj_manzana2, false ); //cambiar objeto
alarm[0] = 20 * room_speed; //contar 20 segundos
}
[/gml]
No entiendo a qué te refieres con la explosión, no has explicado sobre eso.
explosion digamos que la final de la animacion
bueno funciono y no hubiera siguido con mi juego si no fuera a gracias a todos los que contestaron XD