我一直在查看SFML文档,想要制作可点击的精灵,但是目前为止还没有找到任何相关内容。你们觉得能帮我解决这个问题吗?
目前SFML中没有像sf::ClickableSprite
这样的东西,也许永远不会有。(在SFML当前类列表中查看)
但是,您可以使用sf::Sprite
对象和事件来实现此行为。思路很简单-一旦获得sf::Mouse::isButtonPressed(sf::Mouse::Left)
事件,检查鼠标是否在精灵内。如果是,则执行操作。当释放按钮时,您可以执行另一个操作(也许是撤消)。
有一个sf::Sprite::getGlobalBounds()函数,它返回精灵的位置和尺寸。还有一个sf::Mouse::getPosition()函数,它返回鼠标的当前位置。您可以使用sprite.getGlobalBounds().contains(mousePos)
来检查鼠标是否在精灵内。
如果您正在使用视图,则需要将视图的位置添加到sf::Mouse::getPosition(window)
中,因为它获取相对于窗口坐标的鼠标位置。
(感谢Chaosed0提供的其他注意事项。)
sf::ClickableSprite
的东西,而且可能永远不会有 - SFML中当前类的列表。但是,您可以通过使用sf::Sprite
对象和事件来获得此行为。这个想法很简单 - 一旦您获得了sf::Mouse::isButtonPressed(sf::Mouse::Left)
事件,就检查鼠标是否在精灵内。如果是,则执行操作。当释放按钮时,您可以执行另一个操作(也许是撤消)。 鼠标类 - sjaustirniif(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();
- sjaustirnisf::Mouse::getPosition(window)
,因为它获取相对于窗口坐标的鼠标位置;(2)您可以直接使用sprite.getGlobalBounds().contains(mousePos)
(可能在幕后执行相同的操作)。 - Chaosed0