cocos2d-x强制多重继承吗?

Does cocos2d-x force multiple inheritance?

本文关键字:多重继承 cocos2d-x      更新时间:2023-10-16

我有一个类,

class Ticket : public cocos2d::CCNode, public cocos2d::CCTargetedTouchDelegate { ... };

当我使用

在该节点上注册触摸事件时,它可以正常工作:
CCDirector::sharedDirector()->getTouchDispatcher()->addTargetedDelegate(ticket_, 0, true);

然而,如果我改变我的类,使它使用组合而不是继承CCNode位:

class Ticket : public cocos2d::CCTargetedTouchDelegate {
private:
  cocos2d::CCNode* node_;
public:
  Ticket() { node_ = new CCNode(); node_->init(); }
  cocos2d::CCNode* node() { return node_; }
  ...
};

然后下面的SIGSEGV 11爆发:

CCDirector::sharedDirector()->getTouchDispatcher()->addTargetedDelegate(ticket_, 0, true);

我已经添加了ticket_->node()到当前层,但我想知道触摸调度程序是否不喜欢节点和委托是不同的东西。或者换一种说法,触摸调度程序是否期望节点和委托是一样的?

所以简而言之,当我使用多重继承时,我的代码可以工作,但当我使用组合时,它就不能工作了。在不深入研究框架的情况下,有人能说这是真的吗,或者我只是错过了一些明显的东西?我使用cocos2d-2.1rc0-x-2.1.2

是的,看起来cocos2d-x确实强制多重继承。它期望触摸委托能够动态地转换为一个CCObject,当你使用复合时,你的Ticket类不是这样的。当您从CCNode继承时,它本身继承自CCObject,您就清楚了。你可以在github上看到问题。

这似乎不是一个错误,因为文档实际上通过注释

暗示了这一点。

重要:委托将被保留。

CCTouchDispatcher

:: addTargetedDelegate。