【发布时间】:2021-05-01 12:26:49
【问题描述】:
我目前正在 Pygame 中制作飞机射击游戏。我已经创建了平面类,现在开始创建子弹类。但是,我遇到了一个我无法解决的问题: 我真的需要在类内部和 while 循环(游戏的主 while 循环)中使用 pygame.event.get() 循环。因此,当我使用 2 个这样的循环时,游戏控件变得如此怪异和混乱,在我搜索此问题后,我发现通常它必须只有 pygame.event.get() 上的一个循环。我不知道该怎么做,因为如果我将两个循环组合到位于 while 循环中的主循环中,那么我将无法引用项目符号对象,因为它将在类之外。 这是我的代码:
class Singlebullet(object):
def __init__(self):
self.img = pygame.image.load(r'C:\Users\me\Documents\MyGame\bullet.png')
self.x = planeX + 71
self.y = planeY
self.state = 'ready'
self.speed = 0
self.firerate = 1000
def shoot(self):
if current_bullet_type == 'single':
if self.state == 'ready':
MyScrollingScreen.blit(self.img, (self.x, self.y))
if self.state == 'fire':
self.speed = -8
self.y += bullet_speed
MyScrollingScreen.blit(self.img, (self.x, self.y))
if self.y < -20:
self.state = 'ready'
for e in pygame.event.get():
if e.type == pygame.KEYDOWN or e.type == pygame.KEYUP:
if e.key == pygame.K_SPACE:
self.state = 'fire'
pygame.time.set_timer(pygame.USEREVENT+1, self.firerate)
if e.type == pygame.USEREVENT+1:
self.state = 'ready'
s1 = Singlebullet()
while running:
#[...]
for event in pygame.event.get():
#[...]
【问题讨论】: