Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: _-Caleb-_ en Noviembre 03, 2014, 06:20:52 AM

Título: Crear instancias usando variables
Publicado por: _-Caleb-_ en Noviembre 03, 2014, 06:20:52 AM
Buenas.

Aquí vuelvo con las dudas, en este caso estoy intentando "cacharrear" en un juego de naves, la cosa es que sólo tengo un room, el fondo y la idea es que pueda cambiar el contenido mediante archivos INI,(Esto viene dado por una variable global y el lugar por el que salga el jugador del room, si sale por la derecha se eliminan todos los objetos y se carga el mapa que supuestamente estaría a la derecha usando un archivo INI) tengo el número de asteroides de cada sistema, por ejemplo, que funciona bien y la info de cada sistema.

Mi problema viene cuando intento crear los planetas, actualmente tengo 8 clases de planetas diferentes y me gustaría crearlos desde una variable usando el archivo INI.

Para explicarme mejor, este es el código de generación del primero, por ejemplo:

globalvar p1n;
p1 = ini_read_string("Planetas", "p1tipo", "z")
p1n = ini_read_string("Planetas", "p1nombre", "null")

primerplaneta = "obj_Planeta" + p1
instance_create(Player.x, Player.y, primerplaneta)


Los objetos de los planetas se llaman:
obj_Planeta_a
obj_Planeta_b
obj_Planeta_c...

Imagino que véis la idea, la cosa es que me devuelve este mensaje de error siempre, no sé, ¿Qué hago mal? Ya me imagino que es que no puedo crear objetos usando una variable, al menos de este modo, así que... ¿A álguien se le ocurre cómo hacerlo?

Citar___________________________________________
############################################################################################
ERROR in
action number 1
of <Unknown Event>
for object creador_asteroides:

instance_create( ) error: Illegal type
at gml_Script_sys_generator (line 51) - instance_create(Player.x, Player.y, primerplaneta)
############################################################################################

Saludos!
Título: Re:Crear instancias usando variables
Publicado por: Clamud en Noviembre 03, 2014, 07:08:53 AM
Hola. El mensaje de error aparece porque en la función "instance_create" estás usando una variable de tipo cadena (string) para indicar el objeto, cuando debe ser de tipo entero (si te fijas en la penúltima linea dice "illegal type").

Lo mejor sería leer un número desde el archivo ini y después usar una estructura "switch-case":
[gml]
p1 = ini_read_real( "Planetas", "p1tipo", 0 );

switch( p1 )
{
    case 1: instance_create( Player.x, Player.y, obj_planeta_1 ); break;
    case 1: instance_create( Player.x, Player.y, obj_planeta_2 ); break;
    //...
    default: instance_create( Player.x, Player.y, obj_planeta_0 );
}
[/gml]
Título: Re:Crear instancias usando variables
Publicado por: _-Caleb-_ en Noviembre 03, 2014, 09:02:47 AM
Hola Clamud.

Sí, con el switch funciona... Muchas gracias :)
Título: Re:Crear instancias usando variables
Publicado por: TheSandBoxMKG en Noviembre 03, 2014, 05:28:18 PM
IMPORTANTE: LOS NOMBRES DE LOS OBJETOS NO SON STRINGS

O sea, no van ente comillas.
Título: Re:Crear instancias usando variables
Publicado por: _-Caleb-_ en Noviembre 06, 2014, 06:26:49 AM
Cita de: TheSandBoxMKG en Noviembre 03, 2014, 05:28:18 PM
IMPORTANTE: LOS NOMBRES DE LOS OBJETOS NO SON STRINGS

O sea, no van ente comillas.

jajaja sí, después de hacer el switch como decía Clamud le busqué la lógica y llegué a esa conclusión :)