Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么这段代码在pygame的主循环之外工作_Python_Pygame - Fatal编程技术网

Python 为什么这段代码在pygame的主循环之外工作

Python 为什么这段代码在pygame的主循环之外工作,python,pygame,Python,Pygame,我刚开始使用pygame,我一直在关注youtube上的教程。我遇到了一个移动问题,教程中的那个家伙只需按下一个按钮就可以移动,但我不能。我必须不停地按按钮,我完全按照他的代码操作。 我在网上搜索发现这个代码 (pygame.key.set_repeat(True) 可以解决问题,但没有被告知将其放置在何处,因此代码如下: 导入pygame pygame.init() win=pygame.display.set_模式((500500)) pygame.display.set_标题(“我的第一

我刚开始使用pygame,我一直在关注youtube上的教程。我遇到了一个移动问题,教程中的那个家伙只需按下一个按钮就可以移动,但我不能。我必须不停地按按钮,我完全按照他的代码操作。
我在网上搜索发现这个代码

(pygame.key.set_repeat(True)
可以解决问题,但没有被告知将其放置在何处,因此代码如下:

导入pygame
pygame.init()
win=pygame.display.set_模式((500500))
pygame.display.set_标题(“我的第一个pygame”)
x=50
y=425
宽度=40
高度=60
水平=5
isJump=True
跳数=10
pygame.key.set_重复(True)
运行=真
运行时:
pygame.时间延迟(100)
对于pygame.event.get()中的事件:
如果event.type==pygame.QUIT:
运行=错误
keys=pygame.key.get_pressed()
如果键[pygame.K_LEFT]和x>vel:
x-=水平
如果键[pygame.K_RIGHT]和x<500-宽度-级别:
x+=vel
如果不是(isJump):
如果键[pygame.K_UP]和y>vel:
y-=水平
如果键[pygame.K_DOWN]和y<500-高度-级别:
y+=水平
如果键[pygame.K_SPACE]:
isJump=True
其他:
如果跳线计数>=-10:
y-=(isJump**2)/2
跳转计数-=1
其他:
isJump=False
跳数=10
胜利填充((0,0,0))
pygame.draw.rect(赢,(0255,0),(x,y,宽度,高度))
pygame.display.update()
pygame.quit()
起初,我把代码写在下面的一行,上面写着

keys=pygame.key.get_pressed()
它不工作,但有一次我把它从主循环中取出,放在while循环之前,现在它工作了。我可以按住键,让我的角色移动,而不必不断敲击。我的问题是为什么它现在能工作。

这是一个问题。您已将整个代码放在事件循环中,而不是应用程序循环中。
每个事件执行一次事件循环。应用程序循环在每个帧中执行一次。
每次按下或释放按钮时,都会生成按钮事件。由返回
KEYDOWN
keydup
事件,并执行事件循环。对于连续移动,必须获取应用程序循环中关键点的当前状态,并更新对象在每个帧中的位置

将代码从事件循环移动到应用程序循环以解决问题。e、 g:

#应用程序循环
运行=真
运行时:
pygame.时间延迟(100)
#事件循环
对于pygame.event.get()中的事件:
如果event.type==pygame.QUIT:
运行=错误
#级别:
x-=水平
如果键[pygame.K_RIGHT]和x<500-宽度-级别:
x+=vel
如果不是(isJump):
如果键[pygame.K_UP]和y>vel:
y-=水平
如果键[pygame.K_DOWN]和y<500-高度-级别:
y+=水平
如果键[pygame.K_SPACE]:
isJump=True
其他:
如果跳线计数>=-10:
y-=(isJump**2)/2
跳转计数-=1
其他:
isJump=False
跳数=10
胜利填充((0,0,0))
pygame.draw.rect(赢,(0255,0),(x,y,宽度,高度))
pygame.display.update()
pygame.quit()