2013-02-06 28 views
0

在我的Cocos2d 2.0 iOS遊戲中,我使用CCMenuAdvanced創建了一個滾動菜單。問題在於菜單的不可見部分也似乎在處理觸摸。CCMenuAdvanced即使在它上面有一個精靈時也會被點擊

下面是代碼(以獲得boundaryRect顯示和作物正常需要):

// background is full screen, with all pixels transparent 
// except the part where menu shows 
CCSprite *menuBackground = [CCSprite spriteWithFile:@"scrollingmenubackground.png"]; 
//... 
[self addChild:menuBackground]; 
//...  
//create menu items 
CCMenuAdvanced *settingsMenu = [CCMenuAdvanced menuWithItems:item1, item2, item3, nil]; 
//... 
[menuBackground addChild:settingsMenu]; 

// foreground is full screen, with an image  
// with a transparent hole where the menu shows 
CCSprite *foreground = [CCSprite spriteWithFile:@"scrollingmenuforeground.png"];  
[menuBackground addChild:foreground]; 
//... 

現在能正常工作,並且菜單顯示,在正確裁剪和處理觸摸。但是,問題是,當我點擊可見菜單下方時,它仍然會處理菜單上的觸摸,即使前面有一個不透明像素的精靈(​​)。

我試過用zorder設置前景比菜單擺弄zorder,但似乎沒有改變任何東西。

menuBackground.zOrder = 1; 
    settingsMenu.zOrder = 2; 
    foreground.zOrder = 3; 

我也試過菜單優先級設置爲INT_MIN以及kCCMenuHandlerPriority - 1,但沒有效果。

如何讓菜單隻響應用戶可見的部分?

感謝 阿南德

+0

你的問題是什麼?這聽起來更像是一個錯誤報告/功能請求給我。這就是CCMenu和CCMenuAdvanced的行爲。而zOrder與輸入無關。 – LearnCocos2D

+0

我希望CCMenuAdvanced只對位於前景的位置(在我的情況下只位於邊界矩形內)做出響應。在滾動看不見的部分,它上面有一個精靈,它不應該對點擊作出響應。我如何實現這一目標? – Anand

回答

1

有一個有效的「面具」,你應該爲前景啓用觸摸使用層。在該層中,您可以接受菜單外的觸摸,並且不執行任何操作,並將其傳遞到面罩內。但是,這會造成一些問題:如果面具內的touchBegan和用戶將手指拖到外面,菜單仍然會繼續滾動。您可以繼承CCAdvancedMenu以實現自己的觸摸處理要求,也可以創建自己的版本。我最終做了後者,因爲我的遊戲設計師需要它的許多其他功能,並且子類化成爲阻礙而不是幫助。順便說一下,不要依靠zOrder來進行觸摸處理,它們是無關的。另外,'觸摸屏'方法可能會在以後回來並困擾你(例如,如果你在滾動菜單旁邊添加其他對象也需要觸摸,那麼觸摸將被遮住),這將是最好的如果所有涉及實現觸摸相關需求的對象都封裝了自己的實現。

+0

謝謝,這工作。我添加了一個支持觸摸的圖層來處理或拒絕位於包含菜單的背景圖層之上的觸摸。它現在工作... – Anand

相關問題