【发布时间】:2013-08-06 13:32:08
【问题描述】:
我目前正在尝试用 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,因为我的移动速度设置为像素/秒而不是每帧的值。
movementspeed 是 5,所以角色应该每秒移动 5 px,不管我有什么 FPS(以及帧时间)。
但是:这给了我非常跳跃的动作,因为那些“stutterframes”会导致跳跃,并且在 nto stuttering 帧上,palyer 的移动速度比它应该的要慢得多。
我的主循环真的很简单,就
while(mMainWindow->isOpen()){
HandleEvents();
Update();
Render();
}
在使用内置帧限制器时(尝试编写我自己的,但我得到了完全相同的结果,只要我使用 sf:sleep 来调节 FPS 以使 cpu 核心不以 100% 负载运行)到 300 FPS。
所以是的,我可以将标准速度设置为 1 而不是 5,但是 setframeratelimit 不是很准确,所以我的移动速度有一些变化,我真的不喜欢。
任何人都有一个想法,我能做什么最好?也许我没有看到所有树木的森林(我实际上不知道你是否用英语说:P)但由于这是我的第一场比赛,我没有经验可以回顾。
【问题讨论】:
标签: c++ sfml frame-rate