Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/126.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在SFML中制作可点击的精灵?_C++_Button_Sprite_Sfml_Clickable - Fatal编程技术网

C++ 如何在SFML中制作可点击的精灵?

C++ 如何在SFML中制作可点击的精灵?,c++,button,sprite,sfml,clickable,C++,Button,Sprite,Sfml,Clickable,我一直在浏览制作可点击精灵的SFML文档,但到目前为止我还没有找到任何东西。 你们觉得你们能帮我吗?到目前为止,SFML中没有类似于sf::ClickableSprite的东西,而且可能永远也不会有。() 但是,您可以通过sf::Sprite对象和事件获得此行为。这个想法很简单-一旦您获得sf::Mouse::isButtonPressed(sf::Mouse::Left)事件,检查鼠标是否在精灵中。如果是,请执行该操作。释放按钮时,您可以执行另一个操作(可能是撤消) 有一个函数可以返回精灵的位

我一直在浏览制作可点击精灵的SFML文档,但到目前为止我还没有找到任何东西。
你们觉得你们能帮我吗?

到目前为止,SFML中没有类似于
sf::ClickableSprite
的东西,而且可能永远也不会有。()

但是,您可以通过
sf::Sprite
对象和事件获得此行为。这个想法很简单-一旦您获得
sf::Mouse::isButtonPressed(sf::Mouse::Left)
事件,检查鼠标是否在精灵中。如果是,请执行该操作。释放按钮时,您可以执行另一个操作(可能是撤消)

有一个函数可以返回精灵的位置和尺寸。还有一个函数,返回鼠标的当前位置您可以使用
sprite.getGlobalBounds().contains(mousePos)
检查鼠标是否在sprite中。

如果使用的是视图,则需要将视图的位置添加到
sf::Mouse::getPosition(window)
,因为它获取相对于窗口坐标的鼠标位置


(感谢您的补充说明。)

到目前为止,SFML中没有类似于
sf::ClickableSprite
,而且可能永远不会有-。但是,您可以通过
sf::Sprite
对象和事件来获得此行为。这个想法很简单-一旦您获得
sf::Mouse::isButtonPressed(sf::Mouse::Left)
事件,检查鼠标是否在精灵中。如果是,请执行该操作。释放按钮时,您可以执行另一个操作(可能是撤消)。那么我该如何检查鼠标是否在精灵中呢?有一个函数可以返回精灵的位置和尺寸。还有一个函数,返回鼠标的当前位置。只需检查鼠标的x是否大于精灵的x位置且小于精灵的位置+宽度。
if(sf::mouse::getPosition(window.x>sprite.getGlobalBounds().left&&sf::mouse::getPosition(window.x)<(sprite.getGlobalBounds().left+sprite.getGlobalBounds().width&&sf::mouse::getPosition(window.y>sprite.getGlobalBounds()).top&&sf::Mouse::getPosition(window).y<(sprite.getGlobalBounds().top+sprite.getGlobalBounds().height))doAction();
上面的两个注意事项:(1)如果使用视图,则需要将视图的位置添加到
sf::Mouse::getPosition(window)
,因为它获取相对于窗口坐标的鼠标位置;(2)您只需使用sprite.getGlobalBounds().contains(鼠标点)(这可能只是在幕后做同样的事情)。