我有一个基类:

class MTBGameObject : public CCNodeRGBA


我创建了另外两个类:

class MTBGamePlayer : virtual public MTBGameObject, virtual public CCSprite
class MTBGameObstacle : virtual public MTBGameObject


但是现在我无法使用MTBGamePlayer的任何属性,并且无法进行转换。

最佳答案

我正在寻找解决此问题的方法,但找不到任何东西。
所以我想到了这个解决方案,我知道这不是最好的解决方案,但是除非它能正常工作。

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;
    }
}

09-06 11:10