我希望struct MenuItem能够使用HighlightRectOutline。我该怎么做?
Text.h
class Text {
public:
....
void Text::highlightRectOutline(sf::RenderWindow &window, sf::Color color);
struct MenuItem {
public:
Menu::MenuResult action;
};
HighlightRectOutline:
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);
}
这个功能是固定的。滚动下来 Menu.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;
};
handleButtonHover:
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。
非常感谢帮助。
答案 0 :(得分:0)
除了不是已经提到的sftrabbit的子类之外,你应该将你的基类'方法声明为受保护的。通过这种方式,它们对于子类是可见的。