user3881815が、それはそれはtime
[ms]でスリープします保証するものではありませんので、問題はあなたのsleep(
時間)
とであることを示唆しているよう。その代わりに、OSスケジューリング粒度間隔の任意のカウントを追加して、不安定さを引き起こす可能性があります。言い換えれば実行をブロックすることは言うまでもなく...マウスの変更によって動かすのではなく、何らかの比率で動かすことになります(同期していないので驚くことはありません)。どのようにそれを取り除くのですか?
最後のマウスの位置を覚えておいて、処理ループ内のすべての実行を使用する必要があります。例えば:あなたのビューは、ズームを使用している場合
double mx=0,my=0,mx0=0,my0=0; // globals with actual and last mouse position
// here your main loop or event or whatever
for (bool exit=false;!exit;)
{
// here your other stuff
// mouse handler
mx0=mx; mx = Mouse::getPosition().x;
my0=my; my = Mouse::getPosition().y;
// here convert mx,my to coordinate system the view.move needs
if (Mouse::isButtonPressed(Mouse::Left)) view.move(mx-mx0,my-my0);
}
は、あなたが最も可能性の高いmx,my
に座標変換適用する必要があるが、それはview.move
が望んでいるものの中に依存します。
私は、私はあなたのビューでの経験がないが、あなたはview.zoom
がどこにあるか、あなたのマウスと同期して動きを作るために
view.move((mx-mx0)*view.zoom,(my-my0)*view.zoom);
または
view.move((mx-mx0)/view.zoom,(my-my0)/view.zoom);
を試すことができますSFMLでコーディングしませんあなたのビューのスケール。どちらがview
表記に依存しているか。
マウスをよりよく扱うには、mousedown、mouseup、mousemoveの各イベントを処理できるように、最後と実際のボタンの状態が必要です。詳細情報については以下を参照してください
ちょうど注意:スクロールホイール 'デルタ 'として報告される実際の値は、ドライバーやプラットフォームに依存する可能性があり、正しいと感じるまではテストが必要かもしれません。 – Mario
こんにちはマリオはあなたの詳細な応答に感謝します。私はmapPixelToCoords()を一度も使用していません。あなたはその機能が何をしているのかを簡単に説明したり、それに関する詳細な文書を私に案内してくれますか? – billy606
私はLorence Hernandezがちょうどそれに答えた愚かな私。 – billy606