我有一堂课,
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