私は現在、SFML で最初のゲーム (および最初の全体) をプログラミングしようとしていますが、1 秒に 1 回程度途切れるという問題に遭遇しました。このようなスタッターの間、フレームタイムは通常よりも 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 であるため、FPS (したがってフレームタイム) に関係なく、キャラクターは毎秒 5 ピクセル移動する必要があります。
しかし、これらの「stutterframes」はジャンプを引き起こし、stutterframes では、palyer は本来よりもはるかにゆっくりと動きます。
私のメインループは本当にシンプルです
while(mMainWindow->isOpen()){
HandleEvents();
Update();
Render();
}
inbuild フレームリミッターを使用している間 (自分で書いてみましたが、CPU コアが 100% の負荷で実行されないように sf:sleep を使用して FPS を調整している限り、まったく同じ結果が得られます) を 300 FPS にします。
ええ、標準速度を 5 ではなく 1 に設定することもできますが、setframeratelimit はあまり正確ではないため、移動速度に多少のばらつきが生じてしまい、それがあまり好きではありません。
誰にもアイデアがありますが、私は何ができるでしょうか? 多分私はすべての木の森を見ているわけではありません (英語でそれを言うかどうかは実際にはわかりません:P) が、これは私の最初のゲームであるため、振り返る経験がありません.