python控制机器移动速度_基于Python和tile的游戏:限制玩家移动速度

博主在使用Python和Pyglet库开发基于等轴测图块的RPG游戏时遇到玩家移动速度不一致的问题。通过全局变量TILE_To_TILE_DELAY限制移动速度,但发现随着FPS的变化,玩家在低FPS环境下移动速度过快。问题可能出在计时器类的实现上,尤其是在更新和检查移动事件的逻辑中。玩家的移动速度在不同FPS下表现不一,需要进一步排查代码以解决速度控制的问题。
摘要由CSDN通过智能技术生成

我使用Python和Pyglet库组装了一个基于等轴测图块的RPG。但是,我遇到了以下问题:

我的玩家移动是基于由瓷砖组成的三维数组上的位置。为了限制移动速度,我使用了一个全局变量:TILE_To_TILE_DELAY=200。在

TILE_TO_TILE_DELAY应该是玩家从一个TILE移动到另一个TILE所需的时间(毫秒)。在这段时间里,他们不应该有新的运动。在

我一直使用的系统是我有一个计时器类,像这样:import time

def GetSystemTimeInMS(): #Return system time in milliseconds

systime = round((time.clock()*1000), 0)

return systime

class Timer:

def __init__(self,time):

#time = time for which the timer runs

self.time = time

self.start_time = 0

self.stop_time = 0

def StartTimer(self):

#start_time = time at which the timer was started

self.start_time = GetSystemTimeInMS()

self.stop_time = self.start_time + self.time

def TimerIsStopped(self):

if GetSystemTimeInMS() >= self.stop_time:

return True

else:

return False

player类有一个Timer对象:

^{pr2}$

当玩家按下W键时,会调用一个函数来检查player.MoveTimer.Timer停止(). 如果返回True,则调用player.MoveTimer.StartTimer()并开始新的移动到下一个位置。在

在偶数循环中,update(dt)函数设置为每秒发生30次:def update(dt):

if player.MoveTimer.TimerIsStopped()

player.UpdatePosition()

pyglet.clock.schedule_interval(update, 1/30)

现在,根据我的逻辑,更新(dt)应该每秒检查30次,是否有足够的时间来保证玩家有一个新的移动事件。然而,由于某些原因,玩家在较低的FPS下移动得更快。在

当我的FPS在30左右时,播放器的移动速度比在瓷砖精灵较少的区域快得多,将帧速率提升到60。在FPS很高的地方,根据我的测量,玩家移动的速度几乎是我的两倍。在

我就是搞不懂,找了一天也没在网上找到什么。如能提供帮助,我将不胜感激。在

编辑:启动MoveTimer的代码:def StartMovement(self, new_next_pos):

self.RequestedMovement = False

if self.GetCanMoveAgain():

self.SetNextPos(new_next_pos)

self.SetMoveDirection(self.GetDirection())

#Start the timer for the movement

self.MoveTimer.StartTimer()

self.SetIsMoving(True)

self.SetStartedMoving(True)

self.SetWalking(True)

self.SetNeedUpdate(True)

self.MOVE_EVENT_HANDLER.CreateMoveEvent()

GetCanMoveAgain()返回玩家。你能再次移动吗,由update(dt)中的UpdatePosition()设置回True

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值