2013-04-01 3 views
0

Большинство разговоров о кнопках для cocos2d, по-видимому, направлено на CCMenu, где CCMenu AFAIK предназначен для размещения строки или столбца в центре экрана. Мне нужно размещать кнопки в случайном порядке на экране и до сих пор найти простое из коробки решение для этого. Я попробовал CCControlButton, но не получил его на работу (CCScale9Sprite spriteWithSpriteFrameName загружается неправильно из атласа спрайта).Индивидуальные кнопки в cocos2d

ответ

0

Это лучший способ, которым я изменился.

Поставьте это как INIT:

 CCMenuItem* menuitemRetry = [[self class] buttonWithSpriteframenameOff:@"retry_off.png" on:@"retry_on.png" at:ccp(198, 184) block:^(id sender) { 
      // Do something 
     }]; 
     CCMenuItem* menuitemMenu = [[self class] buttonWithSpriteframenameOff:@"menu_off.png" on:@"menu_on.png" at:ccp(362, 184) block:^(id sender) { 
      // Do something else 
     }]; 
     CCMenu* menuLow = [CCMenu menuWithItems:menuitemMenu, menuitemRetry, nil]; 
     menuLow.position = CGPointZero; 
     [self addChild:menuLow]; 

Это также необходимо

+(CCMenuItem*)buttonWithSpriteframenameOff:(NSString*)spriteframenameOff on:(NSString*)spriteframeOn at:(const CGPoint)POINT block:(void(^)(id sender))block { 
    CCMenuItem* menuitem = [CCMenuItemImage itemWithNormalSprite:[CCSprite spriteWithSpriteFrameName:spriteframenameOff] selectedSprite:[CCSprite spriteWithSpriteFrameName:spriteframeOn] block:block]; 
    menuitem.position = POINT; 
    return menuitem; 
} 
1

На данный момент я стараюсь использовать это. Он использует только одну кнопку в каждом CCMenu. Таким образом, на моем экране будет много экземпляров CCMenu, по одному для каждой кнопки.

+(CCMenu*)button:(NSString*)spriteframename at:(const CGPoint)POINT block:(void(^)(id sender))block { 
    CCSprite* sprite1 = [CCSprite spriteWithSpriteFrameName:spriteframename]; 
    CCSprite* sprite2 = [CCSprite spriteWithSpriteFrameName:spriteframename]; 
    CCMenuItem* menuitem = [CCMenuItemImage itemWithNormalSprite:sprite1 selectedSprite:sprite2 block:block]; 
    CCMenu* menu = [CCMenu menuWithItems:menuitem, nil]; 
    menu.contentSize = sprite1.contentSize; 
    menu.position = POINT; 
    return menu; 
} 
+0

CCMenu является контейнером для пунктов меню (вы можете смешать различные типы пунктов меню в одном меню), и обеспечивает основные пункты меню с необходимой обработкой касания. Один пункт меню для каждого меню просто отлично ... – YvesLeBorg

Смежные вопросы