Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: dragonmisa en Enero 13, 2015, 03:57:55 AM

Título: como cambiar un objecto con el tiempo
Publicado por: dragonmisa en Enero 13, 2015, 03:57:55 AM
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 :-[
Título: Re:como cambiar un objecto con el tiempo
Publicado por: Clamud en Enero 13, 2015, 04:19:41 AM
¿Las manzanas cambiarán en orden aleatorio?
Título: Re:como cambiar un objecto con el tiempo
Publicado por: dragonmisa en Enero 13, 2015, 04:25:41 AM
si que cambien en orden aletorio
Título: Re:como cambiar un objecto con el tiempo
Publicado por: Clamud en Enero 13, 2015, 05:05:54 AM
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.
Título: Re:como cambiar un objecto con el tiempo
Publicado por: dragonmisa en Enero 13, 2015, 06:12:59 AM
Gracias me funciono  :)
Título: Re:como cambiar un objecto con el tiempo (solucionado)
Publicado por: Clamud en Enero 13, 2015, 03:44:18 PM
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]
Título: Re:como cambiar un objecto con el tiempo
Publicado por: dragonmisa en Enero 14, 2015, 04:20:17 AM
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
Título: Re:como cambiar un objecto con el tiempo
Publicado por: Clamud en Enero 14, 2015, 05:50:36 AM
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.
Título: Re:como cambiar un objecto con el tiempo
Publicado por: dragonmisa en Enero 14, 2015, 06:28:37 PM
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