2013-04-01 63 views
0

大多數關於cocos2d的按鈕似乎都是針對CCMenu的,其中CCMenu AFAIK的意思是在屏幕中央有一行或一列。 我需要將按鈕隨機放置在屏幕上,並且還沒有找到一個簡單的開箱即用的解決方案。我曾嘗試CCControlButton,但沒有得到它的工作(CCScale9Sprite spriteWithSpriteFrameName從精靈圖集加載不正確)。cocos2d中的單個按鈕

回答

0

這是我改變的更好的方法。

將這個像初始化:

 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