Jonny
Jonny

Reputation: 16308

Individual buttons in cocos2d

Most talk about buttons for cocos2d seems to be directed to CCMenu, where CCMenu AFAIK is meant for having a row or column in center of screen. I need to place buttons randomly on screen and have yet to find a simple out of the box solution for this. I did try CCControlButton but didn't get it to work (CCScale9Sprite spriteWithSpriteFrameName loads incorrectly from sprite atlas).

Upvotes: 0

Views: 117

Answers (2)

Jonny
Jonny

Reputation: 16308

This is a better way which I changed to.

Put this in like 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];

This also needed

+(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;
}

Upvotes: 0

Jonny
Jonny

Reputation: 16308

For now I try to use this. It uses only one button in each CCMenu. So my screen will have lots of CCMenu instances, one for each button.

+(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;
}

Upvotes: 1

Related Questions