2013-05-04 57 views
0

我有一个类,cocos2d-x是否强制多重继承?

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

我已经添加票_-> node()到当前层,但我想知道如果触摸调度器不知道如何不喜欢节点和委托是不同的东西。或者换句话说,触摸调度程序期望节点和代表是同一件事情吗?

因此,简而言之,我的代码在使用多重继承时起作用,但在使用组合时不会发生。没有深入研究框架,谁能说这是真的,还是我错过了一些明显的东西?我正在使用cocos2d-2.1rc0-x-2.1.2

+0

至少在cocos2d-iphone中,touch调度程序与非节点类一起工作。 – LearnCocos2D 2013-05-04 22:32:50

回答

1

是的,看来cocos2d-x确实会强制多重继承。它希望触摸委托可以动态地转换为CCObject,而您的Ticket类在您使用组合时不是。当你从CCNode继承,它本身继承自CCObject时,你很清楚。您可以在github上看到问题here

这似乎不是是个错误,虽然,因为文件实际上是指出

重要在此提示:代表将被保留。

for CCTouchDispatcher :: addTargetedDelegate。