Noticias

Se ha publicado un nuevo servicio, el Portal de Juegos Online

Comunidad Game Maker

Bienvenid@ a la comunidad hispana de Game Maker. Nuestro objetivo es crear videojuegos y dar soporte en castellano de GM. Para mejorar nuestro servicio hemos implantado, como adicion al reglamento general, algunas normas especificas en los subforos más comunes. ¡No olvides informarte antes de participar!.

Autor Tema: ¿Me ayudáis con esto? [Solucionado]  (Leído 279 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado 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
« última modificación: Octubre 28, 2018, 04:25:16 am por Pejota »

 


No Tienes Permisos Para Dar Puntos
point 0 Puntos

Este tema no recibió puntos.


Desconectado BssString

Respuesta #1 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

 
Los siguientes usuarios dieron las gracias a este tema: Pejota


Desconectado Pejota

Respuesta #2 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

 


Desconectado BssString

Respuesta #3 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

 
Los siguientes usuarios dieron las gracias a este tema: Pejota


Desconectado Pejota

Respuesta #4 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!