好的,这是我目前的计划:
bif="bg.jpg"
mif="pkmn.png"
import pygame
import sys
from pygame.locals import *
pygame.init()
screen=pygame.display.set_mode ((600,375),0,32)
background=pygame.image.load(bif).convert()
mouse_c=pygame.image.load(mif).convert_alpha()
x,y=0,0
movex, movey=0,0
while True:
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
sys.exit()
if event.type==KEYDOWN:
if event.key==K_LEFT:
movex=-1
elif event.key==K_RIGHT:
movex=+1
elif event.key==K_UP:
movey=-1
elif event.key==K_DOWN:
movey=+1
if event.type==KEYUP:
if event.key==K_LEFT:
movex=0
elif event.key==K_RIGHT:
movex=0
elif event.key==K_UP:
movey=0
elif event.key==K_DOWN:
movey=0
x+=movex
y+=movey
screen.blit(background,(0,0))
screen.blit(mouse_c,(x,y))
pygame.display.update()
问题是,即使我可以向各个方向移动,当我按下右箭头键时,它向右移动,然后如果我一直按住右箭头键并按住左箭头键,它将移动左边,问题是这样的:当我放开右键时,即使我向左走,我的精灵也会停止。
我知道问题是当释放右或左时,x变为0
我想能够保持向右然后向右移动,然后向左按住然后向左移动,但然后向左释放并向右移动,因为我握着正确
我希望我自己解释,我已经尝试了所有内容并在各处搜索,请帮助我,如果有人可以修改我的代码并向我显示,以便我可以分析它,那将是很棒的。
由于
答案 0 :(得分:1)
在您的事件循环中,使用pygame.key.get_pressed检查密钥的状态:
while True:
pressed = pygame.key.get_pressed()
print(pressed[pygame.K_LEFT], pressed[pygame.K_RIGHT])
例如,请参阅this code。
答案 1 :(得分:1)
试试这个:
import pygame
import sys
from pygame.locals import *
bif="bg.jpg"
mif="pkmn.png"
pygame.init()
FPS = 30 # changed for FPS
FPSCLOCK = pygame.time.Clock() # changed for FPS
screen = pygame.display.set_mode ((600,375),0,32)
background = pygame.image.load(bif).convert()
mouse_c = pygame.image.load(mif).convert_alpha()
move_speed = 5 # changed for FPS
x, y = 0, 0
while True:
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
sys.exit()
pressed = pygame.key.get_pressed()
if pressed[K_LEFT]:
x -= move_speed
if pressed[K_RIGHT]:
x += move_speed
if pressed[K_UP]:
y -= move_speed
if pressed[K_DOWN]:
y += move_speed
screen.blit(background,(0,0))
screen.blit(mouse_c,(x,y))
pygame.display.update()
FPSCLOCK.tick(FPS) # changed for FPS
编辑1:我正在运行您的代码并注意到您没有任何FPS监控 - 您只是以CPU可以处理它的最大速率运行代码。这将导致以后出现问题,因此我添加了代码以确保您的FPS永远不会超过30。
编辑2:我的旧代码过于复杂;既然你同意左右举行就什么都不做;这会奏效。 (它也将更具可读性,这有助于保护您免受错误)