Hola!
Eso de compartir el proyecto completo es perfecto para poder probarlo, gracias
Te adjunto una versión modificada con lo que pretendes conseguir. Te recomiendo algún programa visor de diferencias (tipo WinMerge o similar) para que veas exactamente lo que he modificado respecto a tu versión. Lo adjunto dentro de un .zip porque el foro no deja adjuntar directamente archivos python.
El cambio más importante, es que todos los objetos que creas deben estar en una lista, y en cada vuelta del bucle se debe llamar el método update() sobre cada elemento de la lista. El problema en tu versión anterior es que sólo ejecutabas update() sobre el jugador, y sólo una vez sobre el disparo en el momento de ser creado. Por eso no se movía. Verás que he creado la lista actores[], a la que añado jugador, enemigo, y cada instancia del disparo que se crea. Ahora todo se mueve y actualiza como esperas. De igual forma, cuando un disparo cruza la parte superior de la pantalla y se desactiva su sprite, también lo quito de la lista actores[].
Al comprobar la colisión, lo hace sobre cada elemento de la lista actores[] que sea del tipo Enemigo, así puedes tener muchos enemigos activos.
Otro pequeño cambio es la variable fuego en Jugador: es para que sólo se genere un disparo cada vez que pulsas la tecla. Si no, se genera un disparo en cada fotograma mientras esté pulsada, creando un efecto no deseado. Si quisieras implementar autodisparo en vez de un disparo por pulsación, habría que sustituir fuego por un contador de fotogramas, para que sólo te deje generar un disparo cada n fotogramas.
También he sustituido las llamadas a engine.sprites[self.sprite_id].xxx directamente por sprite.xxx. Hace lo mismo, pero el código queda más compacto evitando repetición.
Ánimo!
Eso de compartir el proyecto completo es perfecto para poder probarlo, gracias
Te adjunto una versión modificada con lo que pretendes conseguir. Te recomiendo algún programa visor de diferencias (tipo WinMerge o similar) para que veas exactamente lo que he modificado respecto a tu versión. Lo adjunto dentro de un .zip porque el foro no deja adjuntar directamente archivos python.
El cambio más importante, es que todos los objetos que creas deben estar en una lista, y en cada vuelta del bucle se debe llamar el método update() sobre cada elemento de la lista. El problema en tu versión anterior es que sólo ejecutabas update() sobre el jugador, y sólo una vez sobre el disparo en el momento de ser creado. Por eso no se movía. Verás que he creado la lista actores[], a la que añado jugador, enemigo, y cada instancia del disparo que se crea. Ahora todo se mueve y actualiza como esperas. De igual forma, cuando un disparo cruza la parte superior de la pantalla y se desactiva su sprite, también lo quito de la lista actores[].
Al comprobar la colisión, lo hace sobre cada elemento de la lista actores[] que sea del tipo Enemigo, así puedes tener muchos enemigos activos.
Otro pequeño cambio es la variable fuego en Jugador: es para que sólo se genere un disparo cada vez que pulsas la tecla. Si no, se genera un disparo en cada fotograma mientras esté pulsada, creando un efecto no deseado. Si quisieras implementar autodisparo en vez de un disparo por pulsación, habría que sustituir fuego por un contador de fotogramas, para que sólo te deje generar un disparo cada n fotogramas.
También he sustituido las llamadas a engine.sprites[self.sprite_id].xxx directamente por sprite.xxx. Hace lo mismo, pero el código queda más compacto evitando repetición.
Ánimo!