2 回答

TA貢獻(xiàn)1757條經(jīng)驗(yàn) 獲得超8個(gè)贊
我不會(huì)那樣做,我會(huì)創(chuàng)建一個(gè)包含 draw() 邏輯的 Sprite 類,其中一個(gè) Player 和一個(gè) Weapon 類將繼承玩家將包含武器并在包含你所有的 Game 類中實(shí)例化邏輯
class Sprite:
def draw(self):
# Draw logic, maybe have an image sprite member variable
class Bullet(Sprite):
def __init__(self, posX, posY, angle, velocity, game):
self.posX = posX
self.posY = posY
self.angle = angle
self.velocity = velocity
self.game = game
self.game.bullets.append(self)
def fly(self):
# Add some trigonometry here using the angle and velocity and implement some collision algorithm
class Weapon(Sprite):
posX = 0
posY = 0 #Probably gonna need to keep track of the position, you should init them in constructor
angle = PI
bullets = []
def shoot(self):
if len(self.bullets) <= 10: # maybe you don't want too many bullets
self.bullets.append(Bullet(self.posX, self.posY, self.angle, 100))
class Player(Sprite):
posX = 0
posY = 0
def __init__(self, game):
self.game = game
self.weapon = Weapon()
def shoot(self):
self.weapon.shoot()
class Game:
players = []
bullets = []
def __init__(self, player_count=1):
for i in range(player_count):
self.players.append(Player(self))
def draw(self):
for player in self.players:
player.draw()
for bullet in self.bullets:
bullet.fly()
def main():
game = Game(1)
game.start() # need to implement start logic, rerendering every few MS, etc.
if __name__ == "__main__":
main()

TA貢獻(xiàn)1884條經(jīng)驗(yàn) 獲得超4個(gè)贊
您可以為此使用設(shè)置器
class Weapon(object):
...
@property
def attacking(self):
return self._attacking
@attacking.setter
def attacking(self, value):
if value and not self._attacking:
# logic for when attacking become true
self._attacking = value
然后,當(dāng)您somewep.attacking = True對(duì)代碼的其他部分執(zhí)行操作時(shí),setter 將運(yùn)行。關(guān)于保存 Bullet 實(shí)例。如果實(shí)例化Bullet具有它需要的所有副作用,那么你不需要保存它,Bullet(parameters, ...)你會(huì)沒事的。
如果Bullet框架正在繪制,那么它有一個(gè)對(duì)它的引用,只要框架引用它,GC就不應(yīng)該收集它
添加回答
舉報(bào)