我现在正在学习 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