Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: Pejota en Octubre 27, 2018, 03:52:47 am

Título: ¿Me ayudáis con esto? [Solucionado]
Publicado por: Pejota en Octubre 27, 2018, 03:52:47 am
Buenas,
Os quería comentar mi problema a ver si podemos resolverlo entre todos.
Tengo un objeto, que es un Hitbox, al cual le he dicho que cuando colisione con un Hurtbox, un tercer objeto "RealTortero2" cambie de sprite.
Esto fue fácil, en el evento de acción colisión con el hurtbox puse:

Código: [Seleccionar]
with (RealTortero2) {
action_sprite_set(BH, 0, 1);
}

Pero ahora quiero que cuando Realtortero2 se encuentra en imágenes concretas de sprite concretos, en vez de cambiar a "BH", cambie a "BH0". Esto es lo que me está causando dificultades.

Estos 3 momentos son:
-sprite_index=FSB image_index=8
-sprite_index=SDBS image_index=12
-sprite_index=SBS image_index=12

He probado cosas como:
Código: [Seleccionar]
with (RealTortero2) {
if sprite_index=FSB
{
if image_index=8
{
with (RealTortero2){
action_sprite_set(BH0, 0, 1);
}
}
else
{
with (RealTortero2) {
action_sprite_set(BH, 0, 1);
}
}
}
else
{
with (RealTortero2) {
action_sprite_set(BH, 0, 1);
}
}
}

Y funciona, pero este es solo uno de los 3 momentos en los que quiero que ocurra, y si hago esto con los 3 de forma independiente al final deja de funcionar el "BH0" para siempre, y no sé programar lo suficiente como para poner ese último "else..." al final de los 3 casos como un mismo conjunto.

También he pensado que si lo hiciera con una variable sería más fácil, pero me he visto en la misma dificultad, porque lo que no sé realizar, es una correcta utilización del "else" cuando son varios casos a tener en cuenta y no sólo uno.

Resumo el objetivo para quién se haya liado xD

Hay que conseguir que cuando el hitbox y el hurtbox colisionen, "RealTortero2" cambie su sprite a "BH", menos cuando "RealTortero2" se encuentre en estos momentos de estas animaciones:

-sprite_index=FSB image_index=8
-sprite_index=SDBS image_index=12
-sprite_index=SBS image_index=12

En estos casos, en vez de cambiar a "BH", tendrá que cambiar a "BH0"

Un saludo y gracias por vuestro tiempo
Título: Re:¿Me ayudáis con esto?
Publicado por: BssString en Octubre 27, 2018, 11:57:15 pm
Buenas Pejota

No sé para qué tantos brackets innecesarios, puedes simplificarlo todo si usas el "and" o "&&" que sirve para enlazar condiciones.
"if (condicion1 = true) and (condicion2 = true) { hace algo }"

Acá he simplificado tu código, que a apreciación mía estaba correcto:

Código: [Seleccionar]
with (RealTortero2) {

if (sprite_index = FSB) && (image_index = 8) {
action_sprite_set(BH0, 0, 1);
}
else if (sprite_index = SDBS) && (image_index = 12) {
action_sprite_set(BH, 0, 1);
}
else if (sprite_index = SBS) && (image_index = 12) {
action_sprite_set(BH, 0, 1);
}

}

Hay algunos casos donde el image_index funciona raro, te recomiendo hacer image_index = 0 cada vez que cambias de sprite para asegurarte que se cumpla la condición.

Saludos
Título: Re:¿Me ayudáis con esto?
Publicado por: Pejota en Octubre 28, 2018, 12:12:51 am
Buenas Pejota

No sé para qué tantos brackets innecesarios, puedes simplificarlo todo si usas el "and" o "&&" que sirve para enlazar condiciones.
"if (condicion1 = true) and (condicion2 = true) { hace algo }"

Acá he simplificado tu código, que a apreciación mía estaba correcto:

Código: [Seleccionar]
with (RealTortero2) {

if (sprite_index = FSB) && (image_index = 8) {
action_sprite_set(BH0, 0, 1);
}
else if (sprite_index = SDBS) && (image_index = 12) {
action_sprite_set(BH, 0, 1);
}
else if (sprite_index = SBS) && (image_index = 12) {
action_sprite_set(BH, 0, 1);
}

}

Hay algunos casos donde el image_index funciona raro, te recomiendo hacer image_index = 0 cada vez que cambias de sprite para asegurarte que se cumpla la condición.

Saludos

¡Ah! Lo que me pasa es que soy un ilustrador con apenas conocimientos de programación xD

De todas formas te has confundido. Quiero que en esos 3 casos, sea siempre "BH0", y "BH" para el resto de animaciones que tiene "Realtortero2" (incluidas el resto de imagenes de esas mismas animaciones). Otras muchas animaciones que tiene el personaje y no he nombrado. Que creo y espero que no haga falta nombrarlas todas en el código. Imagino que bastará con algo así como "y cuando no se dan estos casos = BH"

¡¡Muchas gracias!! Puede que igualmente ya sea capaz de sacar lo que busco por mi cuenta con la clase de programación que me has dado xD
Título: Re:¿Me ayudáis con esto?
Publicado por: BssString en Octubre 28, 2018, 02:27:58 am
Hola Pejota

En este caso Game Maker permite encadenar los "if" y "else" en una estructura infinita.
La estructura es la siguiente:
if (caso1) { código 1 }
else if (caso2) { código 2 }
else if (caso3) { código 3 }
else { el código cuando no ocurre ninguno de los 3 casos anteriores }

Para lo que necesitas, simplementa añade una cuarta condición indicando simplemente "else" y debería ejecutarse ese código para cuando no se cumple ninguno de los 3 casos anteriores.

Saludos
Título: Re:¿Me ayudáis con esto?
Publicado por: Pejota en Octubre 28, 2018, 04:24:42 am
Hola Pejota

En este caso Game Maker permite encadenar los "if" y "else" en una estructura infinita.
La estructura es la siguiente:
if (caso1) { código 1 }
else if (caso2) { código 2 }
else if (caso3) { código 3 }
else { el código cuando no ocurre ninguno de los 3 casos anteriores }

Para lo que necesitas, simplementa añade una cuarta condición indicando simplemente "else" y debería ejecutarse ese código para cuando no se cumple ninguno de los 3 casos anteriores.

Saludos

¡Sí! Ya estaba probando esto mientras contestabas y vi que funcionaba :)
¡Genial! Me salvas de días y días sin saber como arreglarlo. ¡Mil gracias!