Hola! Estoy rompiéndome la cabeza por intentar sacar este código: el videojuego que estoy planteando, consiste en que sea jugado desde la vista de los 3 personajes principales; aunque la historia va a ser lineal. No puedo hacer que el objeto jugador cambie los sprites porque (a parte de que son un porrón) las mecánicas de juego difieren entre ellos. Mi primer pensamiento para el cambio fue que colisionasen con un objeto, pero no soy capaz de que funcione. No estoy buscando un menú de selección, sino que cuando un personaje colisione con un objeto invisible, ejecute el cambio de objeto.
Os dejo por aquí algunos de los códigos que intenté y que no funcionaron //surprise.
[gml]globalvar controlList
global.controlList[0]=obj_aster //> ASTER
global.controlList[1]=obj_aster //> ANZU
global.controlList[2]=obj_aster //> NORA
global.controlList[3]=obj_nora //> NORA
global.controlList[4]=obj_nora //> ASTER
global.controlList[5]=obj_nora //> ANZU
global.controlList[6]=obj_anzu //> ANZU
global.controlList[7]=obj_anzu //> NORA
global.controlList[8]=obj_anzu//> ASTER
global.controlCurrent = global.controlList
instance_change(controlList[global.controlCurrent],0)
if collision_point(x,y,obj_salida, false, true) = true
{ instance_change(obj_aster,false) }
else collision_point(x,y,obj_entrada, false, true)
{ instance_change(obj_aster,true) }
[/gml]
[gml]var controlList[0] =obj_aster //> ASTER
if controlList[0] = true
{collision_point(x,y,obj_entrada,false,true)}
{instance_change(obj_entrada,true) }
then controlList0
{
instance_change(obj_aster,false)
}[/gml]
[gml]
control = collision point (instance_change(obj_aster,true)) or instance_change(obj_aster,false)[/gml]
Muchísimas gracias por su tiempo :)
Hola Raskovia
Veo algunas cosas mal en tu código.
Empezando porque declaras:
globalvar controlList
y luego:
global.controlList[0]=obj_aster
Aunque se vean parecida y la variable sea la misma, son dos formas diferentes de declarar una variable y estás declarando 2 variables diferentes.
Te recomiendo dejar todo con "global." porque así veo que lo usa tu código, la otra variable no la usas.
Segundo, lo que haces es:
global.controlCurrent = global.controlList
Quiere decir que a tu variable "Current" le estás asignando como valor el array completo de la "List" en vez de sólo una posición.
Te recomiendo cambiarlo por algo como:
global.controlCurrent = 0
Eso para decirle al código que actualmente tu personaje es "obj_aster".
Luego, a tu objeto "obj_salida" y "obj_entrada" no tengo idea lo que hacen, no sé cuál es la mecánica que quisiste lograr con ello.
Lo que a mi se me ocurre es que uses un sólo objeto, ej: "obj_entrada"
y cuando lo creas, ponle una variable de creación (esas que asignas en la room, poniendo clic secundario sobre el objeto y luego "creation code")
Y le asignas el ID de uno de los personajes (cualquier número de 0 a 8, tal como los definiste en el array).
entonces le pones por ejemplo:
NuevoPersonaje = 3 //para que cambie a obj_nora
después en el Step de tu personaje ponle:
var inst; inst = instance_place(x, y, obj_entrada)
if inst != noone {
instance_change(global.controlList[inst.NuevoPersonaje],false)
}
Eso te cambiará de personaje cada vez que toques el "obj_entrada".
Te colocará el personaje que hayas asignado en la variable de creación en la room del "obj_entrada"
Saludos