2014-09-18 60 views
0

我創建水平選擇和這裏的cocos2d 2.0呼籲對齊菜單按鈕,網格alignItemsInColumns替代了cocos2d 3.0

CCMenu* menu = [CCMenu menuWithItems:...]; 
NSNumber* itemsPerRow = [NSNumber numberWithInt:5]; 
[menu alignItemsInColumns:itemsPerRow, itemsPerRow, itemsPerRow, nil]; 

什麼是替代這個在cocos2d 3.0。 CCLayoutBox只有方向..什麼是CCButtons對齊網格的最佳方式?

回答

0

也許這不是對齊的最佳方式,但它爲我工作

- (CCNode *)contentNode:(NSMutableArray *)levels 
{ 
    CCNode *node = [[CCNode alloc] init]; 
    CGSize bounds = [CCDirector sharedDirector].viewSize; 

    for (int a = 0; a < kChapterCount; a++) 
    { 
     int chapterLevelCount = kLevelCount/kChapterCount; 
     int chapterRowCount = chapterLevelCount/kRowCount; 
     int chapterColumnCount = chapterLevelCount/chapterRowCount; 

     CCLayoutBox *layout1 = [[CCLayoutBox alloc] init]; 
     for (int b = chapterColumnCount-1; b >= 0; b--) 
     { 
      CCLayoutBox *layout2 = [[CCLayoutBox alloc] init]; 
      for (int c = 0; c < chapterRowCount; c++) 
      { 
       int n = chapterLevelCount * a + (chapterRowCount * b + c); 
       NSDictionary *level = levels[n]; 
       int levelNumber = [level[kLevelNumber] intValue] + 1; 
       int levelStars = [level[kLevelStar] intValue]; 
       BOOL levelLock = [level[kLevelLocked] boolValue]; 

       CCButtonAction *button = levelLock ? [self lockedLevel] : [self unlockedLevel:levelNumber star:levelStars]; 
       [layout2 addChild: button]; 
      } 
      layout2.anchorPoint = ccp(0.5, 0.5); 
      layout2.spacing = 10.0f; 
      layout2.direction = CCLayoutBoxDirectionHorizontal; 
      [layout2 layout]; 
      [layout1 addChild:layout2]; 
     } 
     layout1.anchorPoint = ccp(0.5, 0.5); 
     layout1.spacing = 6.0f; 
     layout1.direction = CCLayoutBoxDirectionVertical; 
     [layout1 layout]; 
     layout1.position = ccp(a * bounds.width + bounds.width/2, bounds.height/2); 
     [node addChild: layout1]; 
    } 

    return node; 
} 
0

這很簡單,只使用兩個或更多的CCLayoutBox。

根據您的需要和可擴展性,您可以具有垂直(基於列)或水平(基於行)的「外部」CCLayoutBox。

在CCLayoutBox中添加其他CCLayoutBox實例作爲子項,子佈局框具有相反的方向。例如,如果基礎佈局應該是基於列的(外部CCLayoutBox設置爲垂直),則可以將一個或多個CCLayoutBox與水平對齊添加到另一個CCLayoutBox。每行一個,包含每列的節點。

請注意,無論外部佈局節點是垂直還是水平,在涉及單個「單元」的對齊和間距時也會產生差異。最好做一個簡單的測試,看看哪種方式更適合你的目的。

+0

我有5 CCLabelTTF一個CCLayoutBox。我已將CCLayoutBox方向設置爲CCLayoutBoxDirectionVertical。我想將所有標籤對齊,因爲它們應該是沿着設備的左邊緣。目前他們在中心對齊。我也試圖在代碼中使用Sprite Builder來做到這一點。 – Asdrubal 2015-05-10 18:57:33