Hace poco , yo y un grupo de amigos nos pusimos de acuerdo para desarrollar un juego , en el cual , yo me
haría cargo de la música y la programación, ya que llevaba un tiempo usando Game maker y sabia utilizar el Famitracker.
El problema es que cuando usaba Game Maker utilizaba el Drag n Drop (Agarrar y soltar) predeterminado y ahora que necesito usar código , estoy muy poco iniciado y algo confuso. :P
En nuestro proyecto planeamos hacer una generación de nivel que consistía en escoger rooms al azar (Ya creadas) y conectarlas (Al estilo de TBOI o Enter The Gungeon)
Habia hecho un codigo bastante simple
Sin embargo , tuve varios problemas , ya que el jugador no podía volver a la room anterior y
en algunas rooms , aparecía entre los bloques y era imposible caminar,saltar o disparar.
Mi experiencia en codigo es demasiado baja y tengo que hacer algo un poco complicado :-[
Si alguien pudiese ayudarme lo agradecería un montón :) ,avisen si es necesario el editable o una explicación mas detallada del proyecto.
El código es más fáicl si se diseñan todas las rooms para conectarse entre sí, de forma que no exista la posibilidad de quedar atorado al cambiar de room.
El primer paso es guardar los identificadores de las rooms en una lista o en un array. Se puede hacer manualmente o de forma automática con un script como este: http://www.gmlscripts.com/script/map_rooms (http://www.gmlscripts.com/script/map_rooms)
Esta es una versión modificada que usa una lista, en tu versión no debes agregar las rooms que no son niveles de juego:
[gml]
///list_rooms( list_id );
var lista, i; //variables locales
lista = argument0; //lista a usar
i = room_first; //primera room en el arbol de recursos
while room_exists(i) { //mientras hay rooms que agregar
ds_list_add( lista, i ); //agregar room
i = room_next(i); //siguiente en el arbol de recursos
}
[/gml]
Esta sería la forma de usar el script:
[gml]
global.rooms = ds_list_create();
list_rooms( global.rooms );
[/gml]
Después agrega rooms aleatorias a un array 2D y coloca al personaje en una de esas celdas, supongamos que el mundo mide 11x11 rooms:
[gml]
randomize(); //semilla aleatoria
global.n = ds_list_size( global.rooms ); //numero de rooms
for( i=0; i<11; i+=1 ) // 11 x 11
for( j=0; j<11; j+=1 )
{
global.mundo[i,j] = ds_list_find_value //room
( global.rooms, irandom(global.n) ); //aleatoria
}
//coordenadas en el mundo
global.x_mundo = 5;
global.y_mundo = 5;
//coordenadas en la room que sigue
global.x_sig = 123;
global.y_sig = 123;
//ir a la siguiente room
room_goto( global.mundo[ global.x_mundo, global.y_mundo ]);
[/gml]
En el evento Create o en Room Start mueve el personaje a las coordenadas indicadas anteriormente:
[gml]
x = global.x_sig;
y = global.y_sig;
[/gml]
En el evento Step del personaje debes revisar si se sale de la room y por dónde (izquierda, derecha, arriba o abajo). En cada caso se debe ejecutar un código diferente:
[gml]
//si sale por la izquierda
global.x_mundo -= 1; //room a la izquierda
global.x_sig = room_width; //entra por la derecha
room_goto( global.mundo[ global.x_mundo, global.y_mundo ]);
[/gml]
Muchas Gracias , me ha funcionado :D