2012-04-26 68 views
0

使用CCTouchDispatcher我在我的主要初始化...CCTouchDispatcher優先級問題?

[[CCTouchDispatcher sharedDispatcher] addTargetedDelegate:self priority:0 swallowsTouches:YES]; 

我認爲這是正確的那麼遠我已經拖/下降的工作,一切都與我接觸,但是當我拖動一個精靈凌駕一個CCMenu的觸摸優先級在菜單上,而不是在精靈上 - 有什麼方法可以解決這個問題嗎?

gameBoard = [CCMenu menuWithItems:nil]; 
    [self addChild:gameBoard z:-1]; 

(我填充遊戲鍵盤後)

我是有工作不使用CCTouchDispatcher和手勢識別,但它不觸發ccTouchEnded不管是什麼原因,所以我想我會放棄這一個鏡頭!

任何幫助表示讚賞!

回答

1

爲此找出解決方法。

[[CCTouchDispatcher sharedDispatcher] addTargetedDelegate:self priority:0 swallowsTouches:YES]; 

只需將0改爲-129或更低。 CCMenu優先級爲-128,值越低優先級越高。

[[CCTouchDispatcher sharedDispatcher] addTargetedDelegate:self priority:-130 swallowsTouches:YES]; 

因此,這使得精靈的堆疊到按鈕,所述精靈仍然認識到觸摸的CCMenu。

1

這是一個聰明的解決方案。但我認爲更好的解決方案是你自己實現CCMenu。據我所知,很多人在按鈕上使用CCMenu或者可以按下的東西。但它有許多限制,你無法克服。例如,CCMenu上不能有多個回調函數。所以我建議你有自己的班級來實施它。

這裏是C++的一些代碼,希望它可以幫助(但你仍然必須實現所有的方法,LOL):

class ownButton : public CCNode 
{ 
    public: 
    ownButton(); 

    void init(const char* normalPicPath, const char* pressedPicPath, const char* disabledPicPath, const char* basePicPath); 
    bool isContainpoint(CCTouch *touch); 
    void pressed(); 
    void disabled(); 
    void normalized(); 
    int getStatus(); 
    virtual CCSize getSize(); 
protected: 
    CCSprite* normalPicSprite_; 
    CCSprite* pressedPicSprite_; 
    CCSprite* disabledPicSprite_; 
    CCSprite* basePicSprite_; 
    int stat_; 
};