pygame2.3.0中pygame.key.get_pressed()问题
pygame2.0之前的代码没有问题。但是最近用了pygame2.3.0就有问题了。问题就是pygame.key.get_pressed() 在获取键盘字母的时候 ,无效。下面代码我设置了上下左右键,使用的时候没有任何问题,但是按下q键的时候上下左右都会失效。
import pygame,sys
pygame.init()
screen = pygame.display.set_mode((1280,720))
image = pygame.Surface((32,64))
image.fill('green')
rect = image.get_rect(center = (640,360))
direction = pygame.math.Vector2()
pos = pygame.math.Vector2(rect.center)
speed = 2
clock = pygame.time.Clock()
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
keys = pygame.key.get_pressed()
if keys:
direction.y = -1
elif keys:
direction.y = 1
else:
direction.y = 0
if keys:
direction.x = -1
elif keys:
direction.x = 1
else:
direction.x = 0
if keys:
print('这边是重点')
if direction.magnitude() > 0:
direction = direction.normalize()
pos.x += direction.x * speed
rect.centerx = pos.x
pos.y += direction.y * speed
rect.centery = pos.y
screen.fill((0,0,0))
screen.blit(image,rect)
pygame.display.flip()
clock.tick(60) 在pygame2.3.0中, pygame.key.get_pressed() 的行为可能已经发生了变化。你的代码中的问题可能是由于按下q键时,方向键的条件被覆盖了。为了解决这个问题,可以尝试将 elif 替换为 if ,这样即使按下q键,上下左右键也会继续生效。
修改后的代码如下:
import pygame,sys
pygame.init()
screen = pygame.display.set_mode((1280,720))
image = pygame.Surface((32,64))
image.fill('green')
rect = image.get_rect(center = (640,360))
direction = pygame.math.Vector2()
pos = pygame.math.Vector2(rect.center)
speed = 2
clock = pygame.time.Clock()
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
keys = pygame.key.get_pressed()
if keys:
direction.y = -1
if keys:
direction.y = 1
if not keys and not keys:
direction.y = 0
if keys:
direction.x = -1
if keys:
direction.x = 1
if not keys and not keys:
direction.x = 0
if keys:
print('这边是重点')
if direction.magnitude() > 0:
direction = direction.normalize()
pos.x += direction.x * speed
rect.centerx = pos.x
pos.y += direction.y * speed
rect.centery = pos.y
screen.fill((0,0,0))
screen.blit(image,rect)
pygame.display.flip()
clock.tick(60)
这样,按下q键时,上下左右键仍然会生效。 isdkz 发表于 2023-5-8 11:35
在pygame2.3.0中, pygame.key.get_pressed() 的行为可能已经发生了变化。你的代码中的问题可能是由于按下q ...
试过了没用!》 根据您的问题描述,我认为可能是由于 `pygame.key.get_pressed()` 方法在检测键盘事件时存在一些问题。对于这个问题,可以尝试使用 `pygame.event.get()` 方法来获取键盘按下/松开事件并在循环中处理。
以下是修改后的代码片段:
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
# 检查是否有按键按下或松开
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_UP:
direction.y = -1
elif event.key == pygame.K_DOWN:
direction.y = 1
elif event.key == pygame.K_LEFT:
direction.x = -1
elif event.key == pygame.K_RIGHT:
direction.x = 1
elif event.key == pygame.K_q:
print('这边是重点')
elif event.type == pygame.KEYUP:
if event.key == pygame.K_UP or event.key == pygame.K_DOWN:
direction.y = 0
elif event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT:
direction.x = 0
通过捕获 `pygame.KEYDOWN` 和 `pygame.KEYUP` 事件,我们可以检测到所需的按键状态,并相应地更新方向向量。然后,您可以从键盘控制 `rect` 的移动和其他操作。
希望这能解决您的问题。如果这仍然无法解决问题,请提供更多详细信息或错误消息以进行进一步排查。
有用请设置最佳答案!
页:
[1]