2013-10-30 34 views
4

我在SpriteKit中做了一個聲音切換按鈕,我試圖找到一個快速的方法來做到這一點。我記得在cocos2d有一個叫做CCMenuItemToggle變量,使所有的東西,例如:如何在SpriteKit上製作切換按鈕

CCMenuItemToggle* musicButtonToggle = [CCMenuItemToggle 
               itemWithItems:[NSArray arrayWithObjects:soundButtonOn,soundButtonOff, nil] 
               block:^(id sender) 
               { 
                [self stopSounds]; 
               }]; 

任何人都知道一個辦法做到這一點上SpriteKit?

+0

你需要做一個自定義的按鈕,2個精靈/或標籤,每一個狀態。 – DogCoffee

回答

5

基本切換按鈕子類一SKLabelNode

.H

typedef NS_ENUM(NSInteger, ButtonState) 
{ 
    On, 
    Off 
}; 

@interface ToggleButton : SKLabelNode 

- (instancetype)initWithState:(ButtonState) setUpState; 
- (void) buttonPressed; 

@end 

.M

#import "ToggleButton.h" 

@implementation ToggleButton 
{ 
    ButtonState _currentState; 
} 

- (id)initWithState:(ButtonState) setUpState 
{ 
    if (self = [super init]) { 
     _currentState = setUpState; 
     self = [ToggleButton labelNodeWithFontNamed:@"Chalkduster"]; 
     self.text = [self updateLabelForCurrentState]; 
     self.fontSize = 30; 
    } 
    return self; 
} 

- (NSString *) updateLabelForCurrentState 
{ 
    NSString *label; 

    if (_currentState == On) { 
     label = @"ON"; 
    } 
    else if (_currentState == Off) { 
     label = @"OFF"; 
    } 

    return label; 
} 

- (void) buttonPressed 
{ 
    if (_currentState == Off) { 
     _currentState = On; 
    } 
    else { 
     _currentState = Off; 
    } 

    self.text = [self updateLabelForCurrentState]; 
} 

@end 

添加一個切換按鈕,您的場景

ToggleButton *myLabel = [ToggleButton new]; 
myLabel = [myLabel initWithState:Off]; 
myLabel.position = CGPointMake(CGRectGetMidX(self.frame), CGRectGetMidY(self.frame)); 
[self addChild:myLabel]; 

檢測觸摸

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { 

    UITouch* touch = [touches anyObject]; 
    CGPoint loc = [touch locationInNode:self]; 
    SKNode *node = [self nodeAtPoint:loc]; 

    if ([node isKindOfClass:[ToggleButton class]]) { 
     ToggleButton *btn = (ToggleButton*) node; 
     [btn buttonPressed]; 
    } 
}