2013-11-26 38 views
0

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

所以,我应该在这里被称为“ClickDetected”一个布尔函数及其代码应该这样做:

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

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

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"; 
} 

但是这不起作用。当我点击精灵纹理更改为“点击”。当我释放鼠标按钮时,“clicked”纹理保持不变......但是当我将鼠标纹理更改为“visited”时。它应该保持“点击”,直到我点击其他地方。我试图在这里使用while循环,但它不起作用。我能做什么?

+0

发布伪代码时很难发现编码错误。你能发布你的真实代码吗? – nvoigt

+0

嘿,谢谢你的回答,但我已经找到了错误并修复了它:) – mentor93

+1

你介意写一个简短的答案并接受它,所以这个问题被标记为已解决? – Lukas

回答

1

我把这段代码放到Graph类(方法Update())来管理很多节点。我已经改变了一点,现在它工作正常。