SFML 2.1 - 检测单个鼠标单击并更改纹理

时间:2013-11-26 22:01:03

标签: c++ textures sfml

我想做的是: 我有一个精灵。而这个精灵有3个纹理。第一个纹理,我们称之为“未访问”,是最初的纹理。现在,当我点击精灵时,它应该将其纹理更改为“clicked”,这意味着点击了精灵。并且这个纹理应该保留,直到我点击屏幕上的其他位置。当我这样做时,纹理应该改为第三个,“访问”。如果我再次点击精灵,它应该将其纹理更改为“点击”......

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

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

右?好的,那么,我有一个类Node。这个类有一个方法“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循环,但它没有用。我该怎么办?

1 个答案:

答案 0 :(得分:1)

我已将此代码放入Graph类(方法Update())来管理许多节点。我已经改变了一点,现在它工作正常。