Python 平缓的动作

Python 平缓的动作,python,pyglet,Python,Pyglet,所以在使用Tkinter进行游戏后,我们决定转到Pyglet。但我遇到的一个问题是动作,在Tkinter中,我能够制作一个平滑的动作系统,但在pyglet中,我所能做的就是让角色以抖动的方式移动 导入pyglet 从pyglet.window导入键,窗口 从pyglet导入时钟 从线程导入计时器 X=5#玩家的速度 w=0#控制+y移动 a=0#控制-x移动 s=0#控制-y移动 d=0#控制+x移动 窗=窗(宽=500,高=500)#定义窗 MainChar=pyglet.image.load

所以在使用Tkinter进行游戏后,我们决定转到Pyglet。但我遇到的一个问题是动作,在Tkinter中,我能够制作一个平滑的动作系统,但在pyglet中,我所能做的就是让角色以抖动的方式移动

导入pyglet 从pyglet.window导入键,窗口 从pyglet导入时钟 从线程导入计时器 X=5#玩家的速度 w=0#控制+y移动 a=0#控制-x移动 s=0#控制-y移动 d=0#控制+x移动 窗=窗(宽=500,高=500)#定义窗 MainChar=pyglet.image.load(“MainChar.png”)#加载MainChar.png Player=pyglet.sprite.sprite(MainChar,x=0,y=0)#将MainChar变成一个精灵 @窗口事件 按键上的def(符号、修改器):#查找按键 打印(“按键”) 如果symbol==key.W: 全球w 全球a 全球s 全球d w=真 elif symbol==键A: a=正确 elif symbol==key.S: s=真 elif symbol==键D: d=真 @窗口事件 钥匙释放时的def(符号、修改器): 打印(“键控”) 如果symbol==key.W: w=假 elif symbol==键A: a=错误 elif symbol==key.S: s=假 elif symbol==键D: d=假 @窗口事件 def moveT(): 打印(“循环”) def moveD(): 如果w==真: Player.y+=0.1 elif a==真: Player.x-=5 elif s==真: Player.y-=5 elif d==真: Player.x+=5 moveT() 移动计时器=计时器(0.01,移动) moveTimer.start() @窗口事件 def on_draw(): window.clear() Player.draw() moveT() pyglet.app.run()文件 我之所以将w、a、s和d作为布尔值,是因为我可以在按住键而不是按键的情况下移动角色


任何帮助都会很好,提前谢谢

问题是你使用蟒蛇。这不会触发重新绘制pyglet窗口。
您必须使用并计划每次时钟被勾选时调用的函数。这会导致pyglet窗口也被更新,并触发
on_draw()
事件。e、 g:

@window.event
def移动(dt):
如果w==真:
Player.y+=0.1
elif s==真:
Player.y-=5
如果a==真:
Player.x-=5
elif d==真:
Player.x+=5
pyglet.时钟计划时间间隔(移动,1/60)
此外,还必须在钥匙释放时的
中声明更多的
w
a
s
d

导入pyglet 从pyglet.window导入键,窗口 从pyglet导入时钟 X=5#玩家的速度 w、 a,s,d=假,假,假,假 窗=窗(宽=500,高=500)#定义窗 MainChar=pyglet.image.load(“MainChar.png”) Player=pyglet.sprite.sprite(MainChar,x=0,y=0) @窗口事件 按键上的def(符号、修改器):#查找按键 全球w、a、s、d 如果symbol==key.W: w=真 elif symbol==键A: a=正确 elif symbol==key.S: s=真 elif symbol==键D: d=真 @窗口事件 钥匙释放时的def(符号、修改器): 全球w、a、s、d 如果symbol==key.W: w=假 elif symbol==键A: a=错误 elif symbol==key.S: s=假 elif symbol==键D: d=假 @窗口事件 def移动(dt): 如果w==真: Player.y+=0.1 elif s==真: Player.y-=5 如果a==真: Player.x-=5 elif d==真: Player.x+=5 @窗口事件 def on_draw(): window.clear() Player.draw() pyglet.时钟计划时间间隔(移动,1/60) pyglet.app.run()文件
谢谢你的代码,但是你知道有什么方法可以使对角线运动成为可能吗?由于我正在编写一个街机游戏,我很乐意将其略去,但未来的项目可能需要它。@ChippyT我已经更改了事件回调
moveT
,请参见答案。那就行了。啊,对不起,我倾向于直接抄写东西,这样我才能更好地记住它们。