Cocos2d iphone cocos2d中的单个按钮

Cocos2d iphone cocos2d中的单个按钮,cocos2d-iphone,imagebutton,Cocos2d Iphone,Imagebutton,大多数关于cocos2d按钮的讨论似乎都指向CCMenu,CCMenu AFAIK的意思是在屏幕中央有一行或一列。 我需要在屏幕上随机放置按钮,但还没有找到一个简单的开箱即用的解决方案。我确实尝试了CCControlButton,但没有让它工作(CCScale9Sprite sprite sprite WithPriteFrameName从sprite atlas中错误加载)。现在我尝试使用这个。它在每个CCMenu中仅使用一个按钮。因此,我的屏幕将有许多CCMenu实例,每个按钮一个 +(CC

大多数关于cocos2d按钮的讨论似乎都指向CCMenu,CCMenu AFAIK的意思是在屏幕中央有一行或一列。
我需要在屏幕上随机放置按钮,但还没有找到一个简单的开箱即用的解决方案。我确实尝试了CCControlButton,但没有让它工作(CCScale9Sprite sprite sprite WithPriteFrameName从sprite atlas中错误加载)。

现在我尝试使用这个。它在每个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;
}

这是我改用的一种更好的方法

将其放在类似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;
}

CCMenu是菜单项的容器(您可以在单个菜单中混合使用不同种类的菜单项),并为基础菜单项提供必要的触摸处理。每个菜单一个菜单项就可以了。。。