python - 继续按住一个键并释放另一个
问题描述
我实际上是在用 pygame 创建我的第一个游戏,但是我遇到了一个问题:当我按住 2 个按钮时,一切正常,但是一旦我释放其中一个,pygame.event.get() 返回一个空列表即使我一直握着另一个。因为那个问题,我的角色无法向前跳跃。谢谢帮助!
使用 python Windows 10 和 pygame 1.9.6
在“字符”类中:
def move_right(self):
self.speedx += 3
self.sprite = "stand_r"
def move_left(self):
self.speedx -= 3
self.sprite = "stand_l"
def speed_effect(self):
self.posx += self.speedx
self.posy -= self.speedy
#speed limitation :
if self.speedx > 10 :
self.speedx = 10
if self.speedx < -10 :
self.speedx = -10
在主循环之前:
pygame.key.set_repeat(100,30)
pygame.time.Clock().tick(30)
在主循环中:
for event in pygame.event.get():
keys = pygame.key.get_pressed()
if event.type == QUIT:
continuer = 0
if event.type == KEYDOWN:
if keys[pygame.K_d] or event.key == K_d:
character.move_right()
if keys[pygame.K_a] or event.key == K_a:
character.move_left()
#jump
if character.grounded :
if keys[pygame.K_SPACE]:
character.speedy = 30
pygame.event.get() 释放一个按钮后返回一个空列表。
解决方案
事件循环仅在事件发生时执行。在按下按钮的那一刻和第二次释放按钮时发生一个事件。当按钮被按住时,不会发生任何事件,并且不会执行事件循环。
鼠标的移动将是一个导致事件循环被执行的事件。
在主循环(事件循环外)中使用pygame.key.get_pressed()
,随时获取按键的状态并执行character
. 由 给出的状态在被调用pygame.key.get_pressed()
时是同步pygame.event.get()
的。
for event in pygame.event.get():
keys = pygame.key.get_pressed()
if event.type == QUIT:
continuer = 0
if event.type == KEYDOWN:
if character.grounded :
if event.key == pygame.K_SPACE:
character.speedy = 30
keys = pygame.key.get_pressed()
if keys[pygame.K_d]:
character.move_right()
if keys[pygame.K_a]:
character.move_left()
推荐阅读
- flutter - jitsi 在构建时遇到颤振崩溃
- cookies - 未发送跨域请求中的 httpOnly cookie
- file - Drupal 上传然后移动不会更新文件列表中的路径或文件名
- python - 循环从保存在多个文件夹中的 CSV 创建多个 JSON 文件
- javascript - 如何将获取响应转换为数组缓冲区?
- python - Python:在 VSCode 中使用 Jupyter 内核
- regex - 在 Go 中使用正则表达式替换不区分大小写的字符串和数组(作为字符串)
- html - 使用 div 的 Colspan、rowspan 和布局
- teradata - Teradata 触发器:两个简单的语法问题
- python-3.x - Python3/Cheetah3:“过滤器”类型的对象没有 len()