gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 07:15:57 25 4
gpt4 key购买 nike

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

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

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

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

最佳答案

我已将此代码放入 Graph 类(方法 Update())以管理许多节点。我对其进行了一些更改,现在可以正常工作了。

关于c++ - SFML 2.1 - 检测单击鼠标并更改纹理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20228879/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com