0

我希望 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。

帮助将不胜感激。

4

1 回答 1

0

除了不是已经提到的 sftrabbit 的子类之外,您还应该将基类的方法声明为受保护的。这样,它们对子类可见。

于 2013-02-04T11:16:15.227 回答