私は現在、C++ と SFML を学んでおり、盤上で駒をドラッグ アンド ドロップできるチェス プログラムを作成しようとしています。マウスの左ボタンが押されているかどうか、マウスがピースの上にあるかどうかを確認して、ピースをドラッグします。これらが両方とも当てはまる場合、ピースの位置をマウスの位置に変更します。
唯一の問題は、ピースを非常に速くドラッグして、マウスを下に置いてもピースの上にカーソルを合わせていないことです。
次のようなものを使用してこれを修正したい:
sf::Sprite pieceSelected;
sf::Sprite Pawn;
bool selected;
...
if (LeftButtonDown && isMouseOver(Pawn,Input)) {
pieceSelected=&Pawn;
selected = true;
}
if (LeftButtonDown && selected)
pieceSelected.SetPosition(MouseX - (XSizeSprite / 2), MouseY - (YSizeSprite / 2));
else
selected=false;
App.Draw(Pawn);
「pieceSelected」が「Pawn」を参照するようにしたいので、「pieceSelected」を移動しているときに実際に「Pawn」を同時に移動しています。
編集
これを変更して修正しました
sf:Sprite pieceSelected;
に
sf::Sprite * pieceSelected;
と
pieceSelected.SetPosition
に
pieceSelected->SetPosition