2012-08-06 18 views
2

我正在嘗試爲我的遊戲製作一個項目滾動條。我決定使用擴展名CCMenuAdvanced,並且我能夠使用工作按鈕實現工作菜單列表。但是,我不太明白如何在boundaryRect中正確包含我的菜單。我很清楚boundaryRect並沒有讓菜單列表的「界限」部分消失 - 它似乎只負責滾動。接下來的問題是我還需要做什麼才能獲得使用CCMenuAdvanced的自包含項目列表,當它不再處於邊界時變得不可見且無響應?我是否必須安排追加更新方法來跟蹤各個元素的位置並更改其不透明度和可見性,或者是否有支持的解決方案?使用CCMenuAdvanced - Cocos2d

NSArray *menuItems = [self labelsFromInventory]; 
    CCMenuAdvanced *menu = [CCMenuAdvanced menuWithItems: nil]; 
    for (CCMenuItem *item in menuItems) 
     [menu addChild: item]; 

    [menu alignItemsVerticallyWithPadding: 10 bottomToTop: NO]; //< also sets contentSize and keyBindings on Mac 
    //menu.isRelativeAnchorPoint = YES; 
    menu.position = ccp(30, 40); 
    [self addChild:menu z:2 tag:101]; 

    menu.scale = MIN ((winSize.width/2.0f)/menu.contentSize.width, 0.75f); 
    menu.boundaryRect = CGRectMake(menu.position.x, menu.position.y, 190.0, 20.0); 
    [menu fixPosition]; 

感謝

回答

3

不幸的是在cocos2d,物品不會夾到邊界。所以當一個物品逃離其邊界時,它會一直持續到a)它離開主窗口邊界或b)它落在z順序中的另一個物品「下」。

要做你想做的事情,你可以首先嚐試添加另一個精靈到圖層中,這個圖層是一個Z軸順序高於可滾動部分的「不透明蒙版」,這樣當該項目滾動超過它的容器的邊界,它將被較高的z順序項「隱藏」。

替代路線,我用的是,使用UIView(在我的情況下,UITableView),並使用CCUIViewWrapper包裝它將其添加到窗口。在這種情況下,你必須記住,UIView項目總是會放在GL視圖中的所有內容之上,並且它不能很好地與事物配合,所以它需要一點技巧才能工作。好消息是,您可以使用Interface Builder來設計您的界面,並且您可以立即獲得滾動屏蔽等。

無論哪種方式是一種權衡;目前在Cocos2d中確實沒有簡單的解決方案 - 至少,沒有我知道的。

+0

啊這很有趣。我很早就考慮過在我的Cocos2d項目中實現UIKit,但我看到的文檔包含太多的開銷,真的值得。不過,我不知道CCUIViewWrapper。現在看看它。你知道有哪些樣本項目試圖實現類似於我要使用這個類的東西嗎?謝謝。 – Lendo92 2012-08-06 02:44:25

+0

特別是,你可以使用這個類來改變UI元素的cocos2d元素嗎?就像將我的CCMenuAdvanced添加到UIScrollView一樣?謝謝。 – Lendo92 2012-08-06 03:24:53

+0

變形是什麼意思?例如,你可以使用包裝來使用CCactions(例如FadeIn,FadeOut等)。至於將CCNodes添加到UIView中,我並不特別確定,因爲我還沒有嘗試過。本能地,我想說,不,這是行不通的,如果僅僅因爲UIView總是在你的GL視圖之上,不管是什麼,並且考慮到你的CCNode的東西是GL ......例如, ,使用UIImageView等來實現這些項目以及使用Interface Builder來設置你的UIItem以適應GL視圖。 – 2012-08-06 13:23:54

1

我從CCMenuAdvanced開始創建一個夾在邊界框中的菜單。我不是移動菜單的位置,而是選擇移動菜單中菜單項的位置。這讓我能夠設置菜單項的可見性和其他屬性,如果它們將超出邊界(我向菜單添加了boundaryBox屬性,以及菜單項之間的間距屬性,頂部的高度和底部緩衝區的點數)。我的滾動菜單還提供了一個頂部和底部緩衝區,當我靠近頂部或底部時淡出菜單項。

我在ccTouchMoved方法中確定移動是否可能(即菜單項已經處於最大Y或最小Y)。如果可以移動,我將deltaY應用於所有菜單項並設置每個菜單項的不透明度和可見性屬性。困難的部分是夾緊。

+0

您是否繼承了CCMenuAdvanced以完成此任務?任何細節或現有的例子將不勝感激。我像許多其他不尋常的程序員一樣,喜歡修改現有的代碼,而不是從頭開始。謝謝。 – Lendo92 2012-08-07 03:43:27

+0

實際上,做了太多'修補',我最終不得不重寫一堆東西,除了添加我自己的屬性和東西。我最終在我的代碼中複製了這個類,並且(謹慎地)重寫了一些方法。 – YvesLeBorg 2012-08-07 03:48:07

+0

看看我的答案在這裏的部分難題。 http://stackoverflow.com/questions/10936436/ccadvancedmenu-boundaryrect/10948863#10948863 – YvesLeBorg 2012-08-07 03:50:54