wollok
wollok copied to clipboard
Que el onCollideDo no se ejecute muchas veces ante un error
Actualmente el mensaje game.onCollideDo
fue pensado para ejecutar el bloque una única vez por colisión.
Pero esto no pasa cuando el programa tiene un error (bastante común cuando estudiantes están intentado crear sus primero juegos) y el bloque lanza una excepción.
Dejo este ejemplo:
import wollok.game.*
class Text {
const property image = "wko.png"
const property text
var property position
}
program abc {
const principal = new Text(text = "P", position = game.origin())
game.addVisualCharacter(principal)
game.addVisual(new Text(text = "X", position = game.center()))
game.onCollideDo(principal, { algo => throw new Exception(message="ERROR") })
game.start()
}
Si se hace colisionar los objetos y se observa la consola queda en evidencia que sigue intentando ejecutar el bloque hasta que deje de colisionar.
Esto además genera un problema de usabilidad porque la excepción muchas veces crea un globo de diálogo que se muestra en el juego por unos segundos, el problema es que estos carteles se "acumulan en serie", por lo que el globo de diálogo no desaparece por mucho tiempo.
@ezequielPereyra @AngeliMatias hay que chequear si esto no pasa también en la versión web... y cargar le issue en TS si es necesario también (se puede linkear este directamente).