c++ - 我怎样才能引用一个函数?

标签 c++ function reference sfml

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

最佳答案

是的,从评论中我发现了问题。您的拖放代码反复拾取和放下 pawn。这确实不是正确的解决方案。相反,您应该只将棋子放在 LeftMouseUp 上。

您需要的是 DragOperation 类。当您检测到拖动操作开始时(将鼠标放在 pawn 上),您就创建了它。 DragOperation 类有一个 sf::Sprite & pieceSelected,当然是在它的构造函数中设置的。您还应该存储拖动操作开始的鼠标 pawn 坐标。

拖动时,绘制所选片段的责任应移至 DragOperation 类。这允许您以像素增量平滑地拖动 pawn,而不是仅将其绘制在正方形的中间。

当鼠标按钮被释放时,检查结果然后删除你的 DragOperation 对象。

关于c++ - 我怎样才能引用一个函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15868105/

相关文章:

c++ - 在 linux 上的 c++/Qt 中触发并忘记线程的最简单方法是什么?

C++ 重载运算符 [ ][ ]

javascript - Scrollreveal.js 使用 afterreveal 调用函数

c++如何从函数中的 vector 中删除对象

c++ - 为什么 "copying"复制构造函数中的引用仍然有效?

.net - 如何在 Visual Studio 中通过 F5 部署加载项库?

C++ 从重载的复制赋值运算符调用默认复制赋值运算符

c++ - 深度删除 C++ 对象

javascript - 函数未在 Controller 内部定义,AngularJS

php - 如何编写一个函数来告诉我当前正在查看主页(/index.php)?