【问题标题】:SFML 2.1 - Detecting a single mouse click and changing a textureSFML 2.1 - 检测单击鼠标并更改纹理
【发布时间】:2013-11-26 22:01:03
【问题描述】:

我想要做的是: 我有一个精灵。这个精灵有3个纹理。第一个纹理,我们称之为“未访问”,是最初的纹理。现在,当我点击精灵时,它应该将它的纹理更改为“点击”,这意味着精灵被点击了。这个纹理应该一直存在,直到我点击屏幕上的其他地方。当我这样做时,纹理应该变为第三个,“已访问”。如果我再次点击精灵,它应该将其纹理更改为“点击”...

所以,我应该在这里有一个名为“ClickDetected”的布尔函数,它的代码应该这样做:

if (event.type == Event::MouseButtonReleased && event.mouseButton.button == Left)
   if (mouse_over_sprite)
      return true;

对吗?好的,那么,我有一个类节点。这个类有一个方法“Clicked”:

bool Clicked {
   if (ClickDetected) { return true; }
}

我知道这可能是不必要的,但现在就让它保持吧。接下来,在这个类的Update()方法中:

if (Clicked) { change_texture_to_"clicked"; if (!visited) visited=true; }
else {
   if (!visited) change_texture_to_"not-visited";
   if (visited) change_texture_to_"visited";
}

但这并不能正常工作。当我点击精灵纹理更改为“点击”。当我释放鼠标按钮时,“点击”纹理保持不变......但是当我移动鼠标时,纹理变为“已访问”。它应该保持“点击”状态,直到我点击其他地方。我试图在这里使用一个while循环,但它没有用。我能做什么?

【问题讨论】:

  • 发布伪代码时很难发现编码错误。你能发布你的真实代码吗?
  • 嘿,谢谢你的回答,但我已经找到了错误并修复了它:)
  • 您是否介意写一个简短的答案并接受它,以便将此问题标记为已解决?

标签: c++ textures sfml


【解决方案1】:

我已将此代码放入 Graph 类(方法 Update())以管理许多节点。我稍微改了一下,现在可以正常使用了。

【讨论】:

    猜你喜欢
    • 2015-08-03
    • 1970-01-01
    • 2012-06-13
    • 1970-01-01
    • 1970-01-01
    • 2010-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多