2013-05-07 91 views
0

我有一個有2層的場景。主層和它上面的底層。 hud只有一個帶按鈕和計時器標籤的菜單。我使用的是CCNode-SFGestureRecognizers,因此我可以在主層上的屏幕中間爲每個CCSprites附加標準UIGestureRecognizers。奇怪的是,菜單似乎在吃紅線右側區域的所有觸摸事件。不只是在菜單的底部,而是一直到屏幕的頂部。如果我沒有將菜單添加到圖層中,或者如果將該圖層放在主圖層後面,則一切正常,但這對我來說不起作用。我需要做些什麼來解決這個問題?Cocos2d菜單隻在屏幕的一部分上吃東西

//The hud layer setup 
CCMenu *menu = [CCMenu menuWithArray:@[_recordButton, resetButton, debugButton, _playButton]]; 
[menu setPosition:ccp(windowSize.width - 225, 50)]; 
[menu alignItemsHorizontallyWithPadding:50]; 
[self addChild:menu]; 

//The scene setup in another class 
self.mainLayer = [MainLayer node]; 
[self addChild:_mainLayer z:0]; 
self.hudLayer = [HudLayer node]; 
[self addChild:_hudLayer z:1]; 

Screen Shot

編輯: 我已經嘗試設置菜單的優先[menu setHandlerPriority:128];當沒有工作,我子類CCMenu和壓倒:

-(void) registerWithTouchDispatcher 
{ 
    [[[CCDirector sharedDirector] touchDispatcher] addTargetedDelegate:self priority:200 swallowsTouches:NO]; 
} 

我和swallowsTouches:試過設置爲NOYES,沒有區別。

+0

您是否正在使用TouchDispatcher註冊HUD層? – 2013-05-07 20:33:20

+0

我剛剛嘗試在HUD層中添加' - (void)registerWithTouchDispatcher'實現,它看起來從未被調用過。 – jamone 2013-05-07 20:48:38

+0

你不需要,我只是好奇。但你也必須通過調用'[HudLayer setTouchEnabled:YES]'來註冊它。您可以通過調用'[[[CCDirector sharedDirector] touchDispatcher] setPriority:1 forDelegate:myCCMenu]來修改特定'CCMenu'的優先級;'請記住,觸摸優先級是低到高的,所以較低的數字會變得更高優先。 – 2013-05-07 20:53:06

回答

1

事實證明,CCMenu默認爲contentSize等於設備的屏幕尺寸。這使得它有效覆蓋了我使用的位置的一半。所以我只需將內容大小設置爲接近實際菜單項的整體大小:[menu setContentSize:CGSizeMake(400, 50)];

+0

你也可以在這裏查看我的答案: http://stackoverflow.com/questions/30962072/cocos2dmenu-click-detection-is-a-bit-off-to-bottom-left-whenever-using-a-custo/ 30963564#30963564 這很令人沮喪。剛添加在評論中以供參考。 – 2015-06-21 10:55:55

相關問題