Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: selafio en Agosto 12, 2013, 08:28:09 PM

Título: Aplicar eventos de colision en "IF"
Publicado por: selafio en Agosto 12, 2013, 08:28:09 PM
he estado intentando aplicar eventos de colision utilizando la sentencia "If" pero no lo entiendo, no hay funciones de colision asi que no puedo hacer lo que quiero.

Mi idea era hacer un objeto para el player, que ya estaba listo, se mueve en 8 direcciones. se supone que quiero probar un sistema de niveles. hay una variable para el nivel del jugador y queria que esa variable infuyera en el amount de Draw_healthbar para que al subir el nivel el objeto del player tuviera mas vida. para aumentar un nivel cree un objeto que al colisionar con el aumentaba el nivel, y es ahi donde tuve el problema con "if", luego logre hacerlo combinando gml y D&D, pero no era mi idea, quiero solo hacerlo con gml.

(y ademas me encontre que al colisionar con el objeto, el nivel aumentaba desmesuradamente hasta que dejaba de colisionar con el. Como hacer para que al colisionar con un objeto este detenga al objeto que esta colisionando con el? como hacer murallas y esas cosas...)

es primera vez que me meto con un lenguaje de programacion, asi que les agradeceria mucho que fueran lo mas explicitos posible. De antemano, gracias.
Título: Re:Aplicar eventos de colision en "IF"
Publicado por: penumbra en Agosto 12, 2013, 10:14:44 PM
Cita de: selafio en Agosto 12, 2013, 08:28:09 PM

(y ademas me encontre que al colisionar con el objeto, el nivel aumentaba desmesuradamente hasta que dejaba de colisionar con el. Como hacer para que al colisionar con un objeto este detenga al objeto que esta colisionando con el? como hacer murallas y esas cosas...)


Lo que pasa es que en el evento de colisión, tú haces algo parecido a esto:

If colision == 1           //Si hay colisión
     {salud += 5}        // Aumentar cantidad de salud

Lo que tienes que hacer es declarar una variable que funcione como "interruptor" o switch para aumentar la salud. En CREATE:
subir_vida = 0

En el evento de colisión
subir_vida = 1                            //Indicar que hay que aumentar la salud

En el evento step
if (subir_vida == 1)
{
    salud += 5;
    subir_vida = 0        //Después de subir la salud,  "desactivas" la variable para que ya no siga subiendo
}






Título: Re:Aplicar eventos de colision en "IF"
Publicado por: selafio en Agosto 13, 2013, 01:21:03 AM
Cita de: penumbra en Agosto 12, 2013, 10:14:44 PM
Cita de: selafio en Agosto 12, 2013, 08:28:09 PM

(y ademas me encontre que al colisionar con el objeto, el nivel aumentaba desmesuradamente hasta que dejaba de colisionar con el. Como hacer para que al colisionar con un objeto este detenga al objeto que esta colisionando con el? como hacer murallas y esas cosas...)


Lo que pasa es que en el evento de colisión, tú haces algo parecido a esto:

If colision == 1           //Si hay colisión
     {salud += 5}        // Aumentar cantidad de salud

Lo que tienes que hacer es declarar una variable que funcione como "interruptor" o switch para aumentar la salud. En CREATE:
subir_vida = 0

En el evento de colisión
subir_vida = 1                            //Indicar que hay que aumentar la salud

En el evento step
if (subir_vida == 1)
{
    salud += 5;
    subir_vida = 0        //Después de subir la salud,  "desactivas" la variable para que ya no siga subiendo
}

Amigo, otra consulta sobre eso mismo que mencionaste, al colocar "==" le estas indicando a la variable si debe ser "true" o "false" verdad? cuando es un solo "=" ahi se le asigna el valor a la variable? en ese caso, como le indico ante que situacion debe ser verdadera y en cual falsa? por que, de la forma como tu lo describiste aun debo usar D&D para poner un evento de colision, y otra consulta, en que objeto debo poner el evento? por que la vida es un parametro que se relaciona con el objeto del jugador, es ahi donde tengo que poner el evento de colision y el codigo? ...lo siento, soy un lio, no entiendo nada x.x
Título: Re:Aplicar eventos de colision en "IF"
Publicado por: penumbra en Agosto 13, 2013, 02:09:44 AM
Sí, el doble signo igual se usa para comparar, el signo sencillo para asignar. Ten en cuenta que En game maker:

if (subir_vida == 1) también se puede escribir if (subir_vida)

if (subir_vida == 0) también se puede escribir if (!subir_vida)

Sobre lo que mencionas de indicar cuándo es verdadera y cuando falsa

IF (subir vida)
{
    el código que pongas aquí se ejecuta si subir_vida es 1 (verdadero)
}
ELSE
{
   el código que pongas aquí se ejecuta cuando subir_vida es 0 (falso)
}

Cuando ocurre una colisión, el código se puede poner en cualquiera de los dos objetos involucrados en la colisión. Como yo lo haría sería:

EN CREATE del objeto jugador
subir_vida = 0

En EVENTO COLISIÓN del objeto con el que chocas (item, pared, etc)
obj_jugador.subir_vida = 1    <---- llamas a la variable del objeto jugador desde el objeto item

En STEP del objeto jugador
if (subir_vida)
{
    salud += 5;
    subir_vida = 0     
}

El código de colisión y el de step puede ponerse en cualquiera de los dos objetos, pero tienes que se cuidadoso al llamar las variables, saber cuáles son locales y cuales no. Por ejemplo, si quieres subir la vida del jugador desde el objeto item

en STEP del objeto item
if (obj_jugador.subir_vida)
{
    obj_jugador.salud += 5;
    obj_jugador.subir_vida = 0     
}