我目前正在尝试用 SFML 编写我的第一个游戏(也是我的第一个整体游戏),但我遇到了一个问题,即我每秒会出现一次口吃。在这种口吃期间,帧时间比正常情况高 3 到 4 倍,只要我不运行非常高的 FPS(300+),这真的很明显。
没问题(至少 atm),因为性能不是问题,但是:
这样做时,我的运动方法真的很糟糕,并且比它应该做的要慢得多。
我的运动方法:
void Player::Update(float frametime){
mMovementSpeedTimefactor = frametime * 60 / 1000.0f;
setMovementVector(sf::Vector2f( mMovementVector.x * mMovementSpeedTimefactor, mMovementVector.y *mMovementSpeedTimefactor));
validateMovement();
//std::cout << mTestClock->restart().asMilliseconds() << std::endl;
moveObject();
this->updateAnimation();
}
frametime 是以毫秒为单位的帧时间,我乘以 60,因为我的移动速度设置为像素/秒而不是每帧的值。
移动速度是 5,所以角色应该每秒移动 5 像素,无论我有什么 FPS(以及帧时间)。
但是:这给了我非常跳跃的动作,因为那些“口吃帧”会导致跳跃,并且在 nto 口吃帧上,palyer 的移动速度比它应该慢得多。
我的主循环很简单,只是
while(mMainWindow->isOpen()){
HandleEvents();
Update();
Render();
}
在使用内置帧限制器时(尝试编写我自己的,但我得到了完全相同的结果,只要我使用 sf:sleep 来调节 FPS 以使 cpu 核心不以 100% 负载运行)到 300 FPS。
所以是的,我可以将我的标准速度设置为 1 而不是 5,但是 setframeratelimit 不是很准确,所以我的移动速度有些变化,我真的不喜欢。
任何人都有一个想法,我最能做什么?也许我没有看到所有树木的森林(我实际上不知道你是否用英语说:P)但由于这是我的第一场比赛,我没有经验可以回顾。