我希望 struct MenuItem 能够使用 HighlightRectOutline。我该怎么做呢?
文本.h
class Text {
public:
....
void Text::highlightRectOutline(sf::RenderWindow &window, sf::Color color);
struct MenuItem {
public:
Menu::MenuResult action;
};
高亮矩形轮廓:
void highlightRectOutline(sf::RenderWindow &window, sf::Color color) {
sf::RectangleShape outlineRect;
sf::Vector2f size(Text::getWidth(), Text::getHeight());
outlineRect.setSize(size);
outlineRect.setPosition(Text::getPosition());
outlineRect.setFillColor(sf::Color::Transparent);
outlineRect.setOutlineColor(color);
outlineRect.setOutlineThickness(5);
window.draw(outlineRect);
}
这个功能是固定的。向下滚动菜单.h
class Menu {
public:
static enum MenuResult { Exit, Options, Back, ChangeResolution, Play, Nothing };
MenuResult showMMenu(sf::RenderWindow &window);
MenuResult showOMenu(sf::RenderWindow &window);
private:
MenuResult getMenuResponse(sf::RenderWindow &window);
MenuResult handleClick(int x, int y);
Menu::MenuResult Menu::handleButtonHover(sf::RenderWindow &window, Text::MenuItem menuItem, int x, int y);
std::list<Text::MenuItem> menuItems;
};
手柄按钮悬停:
Menu::MenuResult Menu::handleButtonHover(sf::RenderWindow &window, Text::menuItem menuItem, int x, int y) {
sf::Color color(255, 122, 40);
std::list<Text::MenuItem>::iterator it;
for(it = menuItems.begin(); it != menuItems.end(); it++)
{
sf::floatRect menuItemRect = (*it).getRect();
if( menuItemRect.contains(x, y))
menuItem.highlightRectOutline(window, color);
}
return Nothing;
}
这不能使用 getRect 或 menuItem。
帮助将不胜感激。