Aligning CCMenu to a grid

前端 未结 5 1490
星月不相逢
星月不相逢 2021-01-14 07:38

Does anybody know the best practice approach to getting an array of CCMenuItems to align to a grid? This is a cocos2d question

For example :

int lev         


        
5条回答
  •  自闭症患者
    2021-01-14 08:19

    Here is my solution, i hope it helps.

    First define this struct somewhere:

    typedef struct
    {
     int cols;
    }RowInfo;
    

    Then:

    -(void)layoutMenu:(CCMenu *)menu rowInfo:(RowInfo[])inf rows:(int)rows padding:(CGPoint)padding     
    {
    CCMenuItem *dummy = (CCMenuItem *)[menu.children objectAtIndex:0];
    int itemIndex = 0;
    
    float w = dummy.contentSize.width;
    float h = dummy.contentSize.height;
    
    CGSize screenSize = [[CCDirector sharedDirector]winSize];
    CCArray *items = [menu children];
    
    float startX;
    
    for (int i = rows - 1; i >=0; i--)
    {
        int colsNow = info[i].cols;
    
        startX = (screenSize.width - (colsNow * w + padding.x * (colsNow - 1)))/2;
        float y = i * (padding.y + h);
    
        for (int j = 0; j < colsNow; j++)
        {
            CCMenuItem *item = (CCMenuItem *)[items objectAtIndex:itemIndex];
            item.anchorPoint = ccp(0,0);
            item.position = ccp(startX, y);
            startX += padding.x + w;
            itemIndex++;
        }
    }
    }
    

    The call goes like this(a custom keyboard):

    //create custom keyboard
    NSArray *captions = [NSArray arrayWithObjects:
    @"Q", @"W", @"E", @"R", @"T", @"Y", @"U", @"I", @"O", @"P",
       @"A", @"S", @"D", @"F", @"G",@"H", @"J", @"K", @"L",
         @"Z", @"X", @"C", @"V", @"B", @"N", @"M", nil];
    
    CCMenu *menu = [CCMenu menuWithItems:nil];
    
    [self addChild:menu];
    
    for (NSString *caption in captions)
    {
        CCLabelTTF *label = [CCLabelTTF labelWithString:caption fontName:@"Courier" fontSize:25];
        CCMenuItemLabel *item = [CCMenuItemLabel itemWithLabel:label target:self selector:@selector(callDelegate:)];
        [menu addChild:item];
    }
    
    RowInfo info[3] = {{7}, {9}, {10}}; //inverse order
    
    [self layoutMenu:menu withRowInfo:info rows:3 padding:ccp(15, 15)];
    

提交回复
热议问题