Enemy
组中的精灵沿随机方向移动。如果它们碰到窗户的边缘,则会向后反弹(从左到右,从右到左)。当P
按下时,.stop()
导致所有敌人暂停。.start()
取消暂停。但是,现在敌人飞出屏幕,越过窗口左右两侧设置的边界。.start()
应该保持不变的.update()
。
class Enemy(pygame.sprite.Sprite):
def __init__(self, position, speed):
pygame.sprite.Sprite.__init__(self)
self.image = pygame.image.load("enemy-spaceship-sprite.png")
self.image = self.image.convert()
self.image = pygame.transform.scale( self.image, (50, 50))
self.image.set_colorkey( self.image.get_at( (1,1) ) )
self.rect = self.image.get_rect()
self.rect.center = position
(self.speedX, self.speedY) = speed
self.speedHolder = speed
def update(self):
self.rect.center = (self.rect.centerx + self.speedX, self.rect.centery + self.speedY)
if self.rect.left < 0:
self.speedX = abs(self.speedX)
if self.rect.right > WIDTH :
self.speedX = -1 * abs(self.speedX)
if self.rect.top < 0:
self.speedY = abs(self.speedY)
if self.rect.top > HEIGHT:
self.rect.bottom = 0
def stop(self):
self.speedY = 0
self.speedX = 0
def start(self):
(self.speedX, self.speedY) = self.speedHolder
游戏循环:
keepGoing = True
while keepGoing:
# Set FPS of the game - 30 frames per second/tick
clock.tick(CLOCK_TICK)
# Every 30 ticks is a second
tickCount += 1
# Pause everything in the game
if pause == True:
for eachEnemy in enemyGroup:
eachEnemy.stop()
else:
for eachEnemy in enemyGroup:
eachEnemy.start()
########### Bunch of skipped code ###########
missileGroup.clear(screen, background)
missileGroup.update()
missileGroup.draw(screen)
pygame.display.flip()
我怀疑您使用的是初始敌人speed
参数列表,而不是元组。
区别很重要,因为Python列表将作为引用传递,而元组作为value传递。因此,当速度作为列表传递时,初始化程序self.speedHolder = speed
不会复制这些值,而只会指向原始列表。可能您的所有实例都Enemy
使用相同的列表。
如果更改此列表,则指向的值Enemy.start()
显然也会更改。因此,您将看到描述的行为。
确保在创建的实例(Enemy
即speed
元组)时,例如:
position = ( 100, 100 )
speed = ( 3, 3 ) # speed is a tuple
monster = new Enemy( position, speed ) # <<-- tuples pass by value (copy)
speed = ( 20, -3 ) # nothing happens to monster
并不是:
position = [ 100, 100 ]
speed = [ 3, 3 ] # speed is a list
monster = new Enemy( position, speed ) # <<-- lists passed by reference
speed = [ 20, -3 ] # monster now moves erratically
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句