Pygame - 在 MOUSEBUTTONDOWN 事件中获取子弹以启动屏幕
Pygame - Getting a bullet to fire up the screen on a MOUSEBUTTONDOWN event
创建一个 space 入侵者风格的游戏,使用 sprite 作为图像的姿势 - 试图让子弹在屏幕上不断向上移动,直到它检测到它已经通过 y = 0。我有一个函数to fire 会向上移动子弹,但每次检测到 MOUSEBUTTONDOWN 事件时只能向上移动 5 个像素。理想情况下,它需要在仅触发一个事件后继续移动到屏幕顶部。
这里是关于子弹class和事件循环的相关代码。
# bullet class
class Bullet(pygame.sprite.Sprite):
def __init__(self,path):
pygame.sprite.Sprite.__init__(self)
self.image = pygame.image.load(path)
self.rect = self.image.get_rect()
def shoot(self,pixels):
self.rect.y -= pixels
def track(self):
bullet.rect.x = player.rect.x + 23
事件循环:
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
quit()
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT:
player.moveLeft(5)
if event.key == pygame.K_RIGHT:
player.moveRight(5)
if event.type == pygame.MOUSEBUTTONDOWN:
bullet.shoot(5)
bullet.track()
playerGroup.update()
gameDisplay.blit(backgroundImg,(0,0))
playerGroup.draw(gameDisplay)
bulletGroup.update()
bulletGroup.draw(gameDisplay)
pygame.display.update()
clock.tick(60)
感谢所有回答我问题的人。
您可以在项目符号 class 中添加一个附加属性 shot
。它
最初设置为 0
并在调用 shoot
方法时更新。
然后track
方法更新子弹的y
位置
因此。
class Bullet(pygame.sprite.Sprite):
def __init__(self,path):
pygame.sprite.Sprite.__init__(self)
self.image = pygame.image.load(path)
self.rect = self.image.get_rect()
self.shot = 0 # bullet not shot initially
def shoot(self, pixels):
self.shot = pixels
def track(self):
self.rect.y -= self.shot
因此,一旦单击按钮,shot
属性就会被修改
子弹会继续移动。
创建一个 space 入侵者风格的游戏,使用 sprite 作为图像的姿势 - 试图让子弹在屏幕上不断向上移动,直到它检测到它已经通过 y = 0。我有一个函数to fire 会向上移动子弹,但每次检测到 MOUSEBUTTONDOWN 事件时只能向上移动 5 个像素。理想情况下,它需要在仅触发一个事件后继续移动到屏幕顶部。
这里是关于子弹class和事件循环的相关代码。
# bullet class
class Bullet(pygame.sprite.Sprite):
def __init__(self,path):
pygame.sprite.Sprite.__init__(self)
self.image = pygame.image.load(path)
self.rect = self.image.get_rect()
def shoot(self,pixels):
self.rect.y -= pixels
def track(self):
bullet.rect.x = player.rect.x + 23
事件循环:
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
quit()
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT:
player.moveLeft(5)
if event.key == pygame.K_RIGHT:
player.moveRight(5)
if event.type == pygame.MOUSEBUTTONDOWN:
bullet.shoot(5)
bullet.track()
playerGroup.update()
gameDisplay.blit(backgroundImg,(0,0))
playerGroup.draw(gameDisplay)
bulletGroup.update()
bulletGroup.draw(gameDisplay)
pygame.display.update()
clock.tick(60)
感谢所有回答我问题的人。
您可以在项目符号 class 中添加一个附加属性 shot
。它
最初设置为 0
并在调用 shoot
方法时更新。
然后track
方法更新子弹的y
位置
因此。
class Bullet(pygame.sprite.Sprite):
def __init__(self,path):
pygame.sprite.Sprite.__init__(self)
self.image = pygame.image.load(path)
self.rect = self.image.get_rect()
self.shot = 0 # bullet not shot initially
def shoot(self, pixels):
self.shot = pixels
def track(self):
self.rect.y -= self.shot
因此,一旦单击按钮,shot
属性就会被修改
子弹会继续移动。