在过去的几年里,我编写了一些c ++和java编码,现在我已经开始使用python了。目标是制作游戏。然而,我注意到,在左右移动的玩家的基本动画部分,我的左“速度”比右“速度”快。虽然我的“速度”值完全相同。
更新功能:
def update(self,dt,game):
last=self.rect.copy()
self.time+=dt
if self.left:
self.rect.x-=300*dt
if self.right:
self.rect.x+=300*dt
我注意到如果我将左侧速度更改为250而不是300,它将运行相同。例如,如果我同时按下左右键,则播放器将保持在完全相同的位置。但是如果我的左右速度均为300.玩家将慢慢向左移动。
我的游戏循环:
while 1:
dt=clock.tick(60)
if dt>1000/60.0:
dt=1000/60.0
for event in pygame.event.get():
if event.type==pygame.QUIT:
return
if event.type==pygame.KEYDOWN and event.key==pygame.K_ESCAPE:
return
if event.type==pygame.KEYDOWN and event.key==pygame.K_LEFT:
self.player.left=True
self.player.image=self.player.leftimages[1]
if event.type==pygame.KEYDOWN and event.key==pygame.K_RIGHT:
self.player.right=True
self.player.image=self.player.rightimages[1]
if event.type==pygame.KEYUP and event.key==pygame.K_LEFT:
self.player.left=False
self.player.image=self.player.leftimages[0]
if event.type==pygame.KEYUP and event.key==pygame.K_RIGHT:
self.player.right=False
self.player.image=self.player.rightimages[0]
self.tilemap.update(dt/1000.0,self)
screen.fill((0,0,0))
self.tilemap.draw(screen)
pygame.display.update()
我正在使用Richard Jones的tmx库来导入我在平铺地图编辑器中制作的地图。我希望这是回答我奇怪问题的充分信息。我问过我的其他编程朋友,他觉得很奇怪。
有些代码可能已关闭,因为我只是从原始代码中复制粘贴,其中包含更多内容。但我已经提取出控制运动的最基本部分。
感谢您的时间!
答案 0 :(得分:1)
您是否尝试过从dt
函数中打印update
的值?如果向右移动时向左移动速度不同,那么这就是必须要改变的东西(由你支持说同时左右持续导致没有移动)。
根据我自己的测试,看起来pygame.time.Clock.tick()
返回一个整数值,表示自上次调用以来经过的毫秒数。在您尝试更正此值(dt=1000/60.0
)的位置,您将获得浮点值。我怀疑由于某种原因,当向左或向右按下时计时器关闭,并且您尝试手动更正它会导致在这些情况下将dt
值传递给update
函数。
如果您需要更准确(但CPU密集型)的计时器,那么pygame文档会建议pygame.time.Clock.tick_busy_loop()
。
http://www.pygame.org/docs/ref/time.html#pygame.time.Clock.tick_busy_loop
答案 1 :(得分:0)
不是计算自上一帧以来的时间变化,而是根据玩家离开的距离,你应该每帧一次调用pygame.time.Clock.tick
。然后你可以假设帧之间的时间每次都是相同的,所以dt
将始终是相同的。
截至目前,如果fps有所下降,程序中的其他所有内容都会变慢,但是你的播放器将比其他所有内容更快地开始前进。而不是依赖于时间流逝,通常最好依赖于fps。