pygame的/ Python的。左派似乎比右手更快。为什么?

时间:2013-08-19 19:09:38

标签: python animation pygame

在过去的几年里,我编写了一些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库来导入我在平铺地图编辑器中制作的地图。我希望这是回答我奇怪问题的充分信息。我问过我的其他编程朋友,他觉得很奇怪。

有些代码可能已关闭,因为我只是从原始代码中复制粘贴,其中包含更多内容。但我已经提取出控制运动的最基本部分。

感谢您的时间!

2 个答案:

答案 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。