0
我想结构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'不是子类。这是一个嵌套类。 –
@sftrabbit:呵呵,“子类”是这样一个可怕的,可怕的词选择,这个错误几乎是可以原谅的... –