There may be a much better way to manage artillery.
Tobiah
toby at tobiah.org
Sun May 10 19:06:34 EDT 2009
I'm writing a video game with armed space ships.
I decided to make a class to manage all of the bullets
that may be on the screen at a given time:
class Bullets():
def __init__(self):
self.bullets = []
def update(self):
temp = []
for bullet in self.bullets:
bullet.update()
bullet.time_to_live -= 1
if bullet.time_to_live:
temp.append(bullet)
self.bullets = temp
def add(self, new_bullet):
self.bullets.append(new_bullet)
When the main loop calls .update() on the bullets
object, I want it to decrement a counter on each
bullet, and destroy the bullets who's time has come.
I wanted the bullets to be responsible for destroying
themselves, but a little Googling brought me to points
about dangling references and how an object is not allowed
(nor does it seem to have the means) to destroy itself.
That's why I made this wrapper class for all of the bullets.
The idea is to copy bullets with time left into a temp list
and then overwrite the man bullets array with the good bullets.
I believe that the other bullets will be garbage collected.
I could not delete the items in place within the loop, of course.
Was there a better container than a list for my purposes?
Above is what I settled on, but I wonder
whether my approach is a good one.
Thanks very much,
Toby
More information about the Python-list
mailing list