【发布时间】:2020-11-26 20:23:36
【问题描述】:
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()
【问题讨论】:
-
self.speedHolder持有什么? -
你在哪里设置和更改
pause? -
@Carcigenicate 它拥有
speed参数,因为在Enemy停止后,它们的旧方向被删除了