#c
#c
Вопрос:
У меня есть базовый класс:
class MTBGameObject : public CCNodeRGBA
и я создал два других класса:
class MTBGamePlayer : virtual public MTBGameObject, virtual public CCSprite
class MTBGameObstacle : virtual public MTBGameObject
Но теперь я не могу использовать какое-либо свойство MTBGamePlayer, и я не могу его использовать.
Комментарии:
1. он не использует problem, поскольку это запрещенное слово в названии вопросов!
2. @mc110 Действительно? Какой отличный пример того, почему черные списки являются плохим решением практически любой проблемы.
Ответ №1:
Я искал решение этой проблемы, но ничего не смог найти.. Итак, я пришел к этому решению, я знаю, что оно не самое лучшее, но если оно не работает нормально.
class MTBGameObject {
...
virtual CCNodeRGBA* self() = 0;
}
а затем в дочерних классах я должен переопределить функцию self:
class MTBGamePlayer : public MTBGameObject, public CCNodeRGBA {
...
CCNodeRGBA* MTBGameObstacle::self() {
CCNodeRGBA* node = dynamic_cast<CCNodeRGBA*>(this);
return node;
}
}
class MTBGameObstacle : public CCSprite, public MTBGameObject {
...
CCNodeRGBA* MTBGamePlayer::self() {
CCNodeRGBA* node = dynamic_cast<CCNodeRGBA*>(this);
return node;
}
}