考虑以下计划:
import pygame, sys
from pygame.locals import *
BLACK = (0, 0, 0)
WHITE = (255, 255, 255)
class Player(object):
def __init__(self, world):
self.x = 100
self.y = 100
self.size = 30
self.world = world
def draw(self, windowSurface):
pos = (self.x, self.y, self.size, self.size)
pygame.draw.rect(windowSurface, WHITE, pos)
def moveUp(self):
self.y -= 1
def moveDown(self):
self.y += 1
def moveLeft(self):
self.x -= 1
def moveRight(self):
self.x += 1
class OpenIsaac(object):
def __init__(self):
pygame.init()
self.windowSurface = pygame.display.set_mode((500, 400), 0, 32)
pygame.display.set_caption('OpenIsaac')
pygame.key.set_repeat(1, 2)
self.player = Player(self)
self.objects = [self.player]
def mainLoopStep(self):
self.windowSurface.fill(BLACK)
for object_ in self.objects:
object_.draw(self.windowSurface)
pygame.display.update()
def doQuit(self):
pygame.quit()
sys.exit()
def handleQuit(self, event):
if event.type != QUIT:
return
self.doQuit()
def handleKeyboard(self, event):
if event.type != KEYDOWN:
return
if pygame.key.get_pressed()[K_ESCAPE]:
self.doQuit()
if pygame.key.get_pressed()[K_LEFT]:
self.player.moveLeft()
if pygame.key.get_pressed()[K_RIGHT]:
self.player.moveRight()
if pygame.key.get_pressed()[K_DOWN]:
self.player.moveDown()
if pygame.key.get_pressed()[K_UP]:
self.player.moveUp()
def run(self):
while True:
for event in pygame.event.get():
self.handleQuit(event)
self.handleKeyboard(event)
self.mainLoopStep()
pygame.event.pump()
if __name__ == '__main__':
OpenIsaac().run()
当我按下一个或两个键一段时间移动角色时,角色会在某个时刻停止移动。我需要松开钥匙并再次按下以恢复运动。什么可能导致这种情况?
答案 0 :(得分:0)
这是因为当Pygame收到一键按下时,它会根据代码移动精灵一次并且只移动一次。您需要找到一种方法让程序识别出按键被按下,并让程序保持精灵移动。一种方法是使用pygame.key.set_repeat
。它看起来与此相似:
delay = 100
interval = 50
pygame.key.set_repeat(delay, interval)
delay
是游戏在重复键之前“等待”的毫秒数。 interval
是每个键事件之间的毫秒数。例如,我将delay
设置为100.游戏将在重复键事件之前等待100毫秒。将interval
设置为50将使每个键事件相隔50毫秒。
将这三行放在while
循环之前。这些行不应属于函数或函数。按住键将重复相应的事件,例如继续移动,跳跃等。
我是新手,所以你可能必须通过Youtube或Pygame Docs找到它。遗憾!
将delay
设置为1将终止key.set_repeat
。将其设置为100更高将没有任何效果,用户将不会注意到它。您的interval
值也是如此。我希望它现在能帮到你!