Antes que nada, te aconsejo leer este post, en él se explica como mostrar correctamente tu código en un post:
El indexar correctamente el código nos ayuda a dar mejores respuestas!
Dicho esto, me parece que el error está en que el if no se comprueba nunca. Para eso debería estar dentro de una función que fuera llamada, o en la def actualizar() (que se comprueba automaticamente 60 veces por segundo).
Pero lo más fácil va a ser sin duda incluir ese if de comprobación de la energía DENTRO de la def de la colisión. De esa manera cada vez que haya una colisión se restará la energia, y se comprobará su valor.
EDITO:
He estado haciendo pruebas, y me he dado cuenta de que tu barra de energia no se resta de golpe, sinó que lo hace con una animación:
Entonces lo que pasa es que cuando entra al if, el valor de la barra aún no es 0. De esta forma, el personaje no muere hasta la tercera colisión, cuando la barra de energía es menor que 0 y se cumple el if.
Para esto hay dos soluciones posibles (seguro que hay más, pero no se me ocurren):
1.- Agregar una tarea que añada un retardo de 1 segundo para la comprobación del valor de la energía.
Personalmente, si la energía a restar es muy grande (como en el ejemplo, que es de 50) yo usaría el retardo, para que el actor no se elimine antes de que la barra llegue a 0. Si lo que se le resta es poco (5, ó 10) yo usaría el segundo ya que carga menos la ejecución.
Y pensando ya en un futuro, en el que el actor se enfrentará a diferentes enemigos cada uno con una fuerza diferente, no estaria mal añadir un atributo “fuerza” a cada enemigo para hacer las comprobaciones automaticamente:
Si tienes tiempo y paciencia podrías revisar este juego mío donde los actores tienen cada uno su propia “vida” y “fuerza” y su propia barra de energía.