2013-05-04 49 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。