Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: georgenda en Junio 29, 2011, 01:34:53 AM

Título: Cambio de sprite en path y object_delete(SOLUCIONADO)
Publicado por: georgenda en Junio 29, 2011, 01:34:53 AM
?Hola a todos de nuevo!
Mi problema ahora es que meto en el evento "room start" del objeto enemigo un "set path" con "continue from here" y el siguiente c?digo que se supone que hace que cambie de sprite el enemigo:
left=false
right=false
if path_get_point_x(path0, 0)
{
left=false;
right=true;
}
if path_get_point_x(path0, 1)
{
left=true;
right=false;
}
if (left == true)
{
sprite_index = enemic1_izq
}
if (right == true)
{
sprite_index = enemic1_der
}

Pero nada, el sprite no cambia.

Tambi?n tengo otro problema: siempre que quiero que mi enemigo sea eliminado mediante el sprite de salto del player al saltar y entrar en contacto con ?ste me da el siguiente error:

ERROR in
action number 1
of Collision Event with object <undefined>
for object Samus:

Trying to delete non-existing object.


El c?digo est? puesto en el evento "Collision with enemic_1" en el objeto player, y en el error que me salta pone "Collision Event with object <undefined>", cuando realmente s? que est? puesto que colisiona con el objeto "enemic_1". El c?digo es el siguiente:
if (sprite_index == salto_izq)
{
effect_create_above(ef_smokeup, enemic_1.x, enemic_1.y, 1, c_green)
object_delete(enemic_1)
}
if (sprite_index == salto_der)
{
effect_create_above(ef_smokeup, enemic_1.x, enemic_1.y, 1, c_green)
object_delete(enemic_1)
}

?Qu? es lo que les pasa a mis c?digos? :'( ?Podr?a alguien echarme una mano, por favor?
Título: Re: Cambio de sprite en path y object_delete
Publicado por: eze_96ram en Junio 29, 2011, 06:15:09 PM
Creo tener la respuesta a los dos errores que describes. En primer lugar, el c?digo de cambio de sprite deber?a ir en el evento Step, no en Room Start; ya que en el Room Start ejecuta el c?digo al empezar el room, cuando est? en step se eva?a la condici?n en cada step. Aun as? las primeras dos l?neas quedr?an en el room start, o tambi?n es posible en el evento Create  8). Tambi?n hay un ligero error en las sentencias if. En vez de hacer esto

if path_get_point_x(path0, 0)
{
left=false;
right=true;
}

Intenta usar esto:

if (x == path_get_point_x(path0, 0))
{
left=false;
right=true;
}

Y as? con las dem?s.

Para lo segundo el error es causado porque usas la funci?n equivocada. Lo que hace object_delete() es borrar el objeto del mismo juego, es decir que puede ser m?s utilizado. En cambio si quieres que se elimine ese objeto que colisiona, no se le llama objeto, sino instancia as? que tendr?as que usar la funci?n instance_destroy(), pero tendr?as que poner el c?digo en el evento colisi?n del enemigo al personaje.
En este caso se pondr?a el c?digo as?:

if (Samus.sprite_index == salto_izq)
{
effect_create_above(ef_smokeup, x, y, 1, c_green)
instance_destroy()
}
if (Samus.sprite_index == salto_der)
{
effect_create_above(ef_smokeup, x, y, 1, c_green)
instance_destroy()
}


Para el c?digo de los paths no esto seguro si funciona porque no soy bueno usandolos  :-[, a?n as? lo dem?s lo tengo claro.

Título: Re: Cambio de sprite en path y object_delete
Publicado por: georgenda en Junio 29, 2011, 06:34:43 PM
?Much?simas gracias por tu respuesta!  :)
El segundo error est? perfectamente solucionado, pero el primero no. Fuera cual fuera tu respuesta, much?simas gracias, de verdad :D
Título: Re: Cambio de sprite en path y object_delete(SOLUCIONADO)
Publicado por: georgenda en Junio 30, 2011, 03:50:22 PM
Lo he solucionado por m? mismo y publico esta respuesta porque creo que puede ser ?til para un futuro:
//EVENTO CREATE DEL ENEMIGO:
spr[0]=sprite_derecha
spr[1]=sprite_izquierda

//EVENTO STEP DEL ENEMIGO:
if direction = 0
{sprite_index=spr[0]}
if direction = 180
{sprite_index=spr[1]}

Y en el evento del enemigo "Room start" se debe de insertar el path deseado a velocidad deseada, con "continue from here" para ir de una parte a otra y con "relative".
GRACIAS A TODOS LOS INTERESADOS POR INTENTAR RESOLVER MIS DUDAS    ;D