Python 在游戏中射击
我目前的项目是用python制作空间入侵者。我正在使用pygame库来帮助我这样做。到目前为止,除了玩家开火外,一切正常。当玩家按下左控制键时,玩家应该发射一颗子弹,相反,玩家将继续发射,直到被告知执行其他动作,如移动。如果有人能帮我解决这个问题,我们将不胜感激,代码如下,谢谢Python 在游戏中射击,python,pygame,Python,Pygame,我目前的项目是用python制作空间入侵者。我正在使用pygame库来帮助我这样做。到目前为止,除了玩家开火外,一切正常。当玩家按下左控制键时,玩家应该发射一颗子弹,相反,玩家将继续发射,直到被告知执行其他动作,如移动。如果有人能帮我解决这个问题,我们将不胜感激,代码如下,谢谢 def update(self): self.speed_x = 0 keystate = pygame.key.get_pressed() if keystate[pygame.K_LE
def update(self):
self.speed_x = 0
keystate = pygame.key.get_pressed()
if keystate[pygame.K_LEFT]:
self.speed_x = -10
if keystate[pygame.K_RIGHT]:
self.speed_x = 10
self.rect.x += self.speed_x
if self.rect.right > DISPLAY_WIDTH:
self.rect.right = DISPLAY_WIDTH
if self.rect.left < 0:
self.rect.left = 0
if keystate[pygame.K_LCTRL]:
player.shoot()
def更新(自):
自速度_x=0
keystate=pygame.key.get_pressed()
如果keystate[pygame.K_左]:
self.speed_x=-10
如果keystate[pygame.K_RIGHT]:
自速度_x=10
self.rect.x+=self.speed\u x
如果self.rect.right>显示宽度:
self.rect.right=显示宽度
如果self.rect.left<0:
self.rect.left=0
如果键状态[pygame.K_LCTRL]:
player.shoot()
您遇到了问题,因为您使用了pygame.key.get_pressed()
,这会一直显示True
,直到您释放K_LCTRL
您可以使用fired=True/False
控制是否发射了第一颗子弹
def __init__(self):
self.fired = False
def update(self):
if keystate[pygame.K_LCTRL]:
if not self.fired:
player.shoot()
self.fired = True
else:
self.fired = False
或者使用
event.type==pygame.KEYDOWN
而不是pygame.key.get_pressed()
,因为event
只创建一次-当按钮状态从未按下
更改为按下
时。(相同的键控
仅创建一次-当按钮状态从按下
更改为未按下时
)
并在主循环中执行它
for event in pygame.event.get():
your_object.handle_event(event)
你应该发布
shot
的定义。这是因为你使用了pygame.key.get_pressed()
,这会一直给出True
,直到你释放K\u LCTRL
。您可以使用fired=True/False
控制是否发射了第一颗子弹。或者使用event.type==pygame.KEYDOWN
而不是pygame.key.get_pressed()
,因为event
只创建一次-当按钮状态从未按下变为按下时。
for event in pygame.event.get():
your_object.handle_event(event)