Amigo mañana te voy a contestar bien con un código completo nuevo. Ahora justo debo irme a dormir porque es muy tarde. Pero déjame sugerirte unas cosas para poder mejorar tu juego:
1) Si en el juego se crean normalmente unas cuantas instancias de bolas "10" y otras cuantas de bolas "26" NO te conviene meter el código en la "bola" porque Game Maker debería verificar las colisiones de cada bola para ver si ha colisionado con el objeto del jugador. Si hubiera 5 bolas las haría con las 5. Lo correcto es que este código esté dentro del objeto "jugador" (con las adaptaciones necesarias) porque de esta forma Game Maker solo debería procesar las colisiones del objeto "jugador" solamente y no la de cada bola. Esto es importante porque el manejo de colisiones es relativamente lento. Si hay pocos objetos quizás no se note pero al aumentar se hace mas notorio. De todas formas lo mismo hay que tratar de hacer siempre lo más óptimo.
2) Deberías hacer un código genérico dentro del objeto jugador que funcione para todos los tipos de "bola" incluso para nuevas "bolas" que puedas hacer en el futuro y que esto no te lleve a cambiar código sino que simplemente funcione. Por ejemplo: dentro de cada bola podés tener una variable que indica su "fuerza" o "potencia" (como 10, 26 u otro valor)
Cuando una bola colisione con el jugador, el jugador acceda al other.potencia y en función de eso haga todos los cálculos. En lugar de if (global.salud >= 10) quedaria if (global.salud >= other.potencia) etc. es decir códigos genéricos.
3) Puedes tener diversos objetos "bola" distintos con distintos sprite, etc.y esto te puede llevar a pensar que tienes que hacer un evento colision por cada uno de esos objetos, pero esto no es así, porque en estos casos se hace un objeto padre, es decir, creas un objeto "bola_generico" y a todos los objetos bola le indicas que tienen como padre al objeto "bola_generico" (esto se hace seleccionando "bola genérico" en la opción parent del objeto). Entonces en el objeto jugador tendría un solo evento colision con "bola_generico".
Entonces puedes agregar todos los objetos bolas distintos que quieras y con solo definir su parent como "bola_genérico" sería suficiente para que el objeto "jugador" lo verifique en las colisiones.
Si todos los objetos bolas son similares en su comportamiento podrías tener un solo objeto bola y al momento de crearlo le asignas un sprite y le cambias la variable "potencia" y con esto no necesitarias nada de lo dicho anteriormente. Con un solo objeto tenes todos los tipos de bola que quieras con tan solo cambiarle el sprite y los datos internos al momento de crear la instancia (sin necesidad de definir parent ni nada porque es un solo objeto)
4) Podrías incorporar la idea de que si bien la armadura protege pero se va deteriorando.
Mañana te lo armo. Me gustaría hacerte un código renovado. Lo bueno de eso es que después es muy fácil agregar nuevas "bolas" distintas porque se pueden agregar y funcionarían sin modificar el código, o al menos mucho menos código que modificar. Saludos
1) Si en el juego se crean normalmente unas cuantas instancias de bolas "10" y otras cuantas de bolas "26" NO te conviene meter el código en la "bola" porque Game Maker debería verificar las colisiones de cada bola para ver si ha colisionado con el objeto del jugador. Si hubiera 5 bolas las haría con las 5. Lo correcto es que este código esté dentro del objeto "jugador" (con las adaptaciones necesarias) porque de esta forma Game Maker solo debería procesar las colisiones del objeto "jugador" solamente y no la de cada bola. Esto es importante porque el manejo de colisiones es relativamente lento. Si hay pocos objetos quizás no se note pero al aumentar se hace mas notorio. De todas formas lo mismo hay que tratar de hacer siempre lo más óptimo.
2) Deberías hacer un código genérico dentro del objeto jugador que funcione para todos los tipos de "bola" incluso para nuevas "bolas" que puedas hacer en el futuro y que esto no te lleve a cambiar código sino que simplemente funcione. Por ejemplo: dentro de cada bola podés tener una variable que indica su "fuerza" o "potencia" (como 10, 26 u otro valor)
Cuando una bola colisione con el jugador, el jugador acceda al other.potencia y en función de eso haga todos los cálculos. En lugar de if (global.salud >= 10) quedaria if (global.salud >= other.potencia) etc. es decir códigos genéricos.
3) Puedes tener diversos objetos "bola" distintos con distintos sprite, etc.y esto te puede llevar a pensar que tienes que hacer un evento colision por cada uno de esos objetos, pero esto no es así, porque en estos casos se hace un objeto padre, es decir, creas un objeto "bola_generico" y a todos los objetos bola le indicas que tienen como padre al objeto "bola_generico" (esto se hace seleccionando "bola genérico" en la opción parent del objeto). Entonces en el objeto jugador tendría un solo evento colision con "bola_generico".
Entonces puedes agregar todos los objetos bolas distintos que quieras y con solo definir su parent como "bola_genérico" sería suficiente para que el objeto "jugador" lo verifique en las colisiones.
Si todos los objetos bolas son similares en su comportamiento podrías tener un solo objeto bola y al momento de crearlo le asignas un sprite y le cambias la variable "potencia" y con esto no necesitarias nada de lo dicho anteriormente. Con un solo objeto tenes todos los tipos de bola que quieras con tan solo cambiarle el sprite y los datos internos al momento de crear la instancia (sin necesidad de definir parent ni nada porque es un solo objeto)
4) Podrías incorporar la idea de que si bien la armadura protege pero se va deteriorando.
Mañana te lo armo. Me gustaría hacerte un código renovado. Lo bueno de eso es que después es muy fácil agregar nuevas "bolas" distintas porque se pueden agregar y funcionarían sin modificar el código, o al menos mucho menos código que modificar. Saludos