我現在正試圖在SFML中編程我的第一個遊戲(以及我的第一個整體遊戲),但我碰到了一個問題,我每秒鐘都會遇到一次口吃。在這樣的口吃期間,Frametime比正常情況高出3到4倍,這真的很明顯,只要我沒有運行真正的高FPS(300+)。如何調整遊戲循環幀率?
沒問題(至少大氣壓)的性能是不是一個問題,而是:
在做我的運動方法真的怪胎和移動方式方法要慢,這是應該做的。
我的運動方法:
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();
}
幀時間以毫秒爲單位的幀時間,且i乘以60,如我的movementspeed每幀設置爲用於像素/秒的值,而不是。
運動速度是5,所以角色應該每秒移動5 px,無論我有FPS(因此Frametime)。
但是:這給了我真正的跳躍運動,因爲那些「stutterframes」導致了跳躍,並且在沒有停頓的幀上,palyer移動的速度比它應該慢很多。
我的主循環非常簡單,只需
while(mMainWindow->isOpen()){
HandleEvents();
Update();
Render();
}
同時使用inbuild framelimiter(試圖寫我自己,但我得到了同樣的結果,只要我使用SF:睡眠調節FPS不使CPU核心以100%負載運行)至300 FPS。
所以是的,我可以將我的標準速度設置爲1而不是5,但 setframeratelimit不是很準確,所以我得到一些運動速度的變化,我真的不喜歡。
任何人都有一個想法,我最好能做什麼?也許我沒有看到所有樹木的森林(我實際上不知道你是否用英語說P:但是因爲這是我的第一場比賽,我沒有經驗可以回顧。
非常感謝,我會試試看。 – Daepilin
嗯,沒有工作。我想我必須爲'frametime'設置一個最大值,否則我將永遠得到這些跳轉。 +雖然它應該導致相同的值,但它仍然比僅將速度設置爲1.0慢很多... 那麼,現在我想我繼續使用內部framelimiter,並將我的速度設置爲「應該」幀速率。我想我總是可以改變,但我真的很沮喪。 但是,謝謝你的建議:) – Daepilin
嘗試偶爾編寫'mMovementSpeedTimeFactor'到控制檯,並檢查它是否接近0以確認/不確認我的原始想法 –