在Spritekit中存储信息,如alphas和调用哪些方法

时间:2014-12-28 20:20:49

标签: objective-c delegates sprite-kit nsuserdefaults skscene

我还是业余爱好者。当我按下主页按钮时,我想在SettingsScene中保存信息。此信息包含每个按钮的alpha,游戏应该知道调用defaultModePlay(检查sendInformationAboutDefaultChallengeSettingsScene.h)等方法。我希望你能按照下面的代码。如果这段代码看起来很傻,请耐心等待,欢迎您提出建议。

简单来说:我想从NSUserDefaults存储信息(可能使用SettingsScene)。我有什么方法可以做到吗?

这是delegate ...

SettingsScene的设置方式
@class SettingsScene;

@protocol SettingsSceneDelegate <NSObject>

@required

-(void)defaultModePlay;
-(void)mediumModePlay;
-(void)hardModePlay;

@end

@interface SettingsScene : SKScene

@property (nonatomic, weak) id <SettingsSceneDelegate, SKSceneDelegate> delegate;

@end

这是SettingsScene.m

中的方法
-(void)sendInformationAboutDefaultChallenge
{
    [self.delegate defaultModePlay];
}
游戏SettingsScene.m中的

touchBegan方法,按下这些按钮时,alpha更改了SettingsScene.h,他们应该调用gameScene中设置的方法。这些方法将信息发送给{ {1}}控制粒子的速度。

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    UITouch *touch = [touches anyObject];
    CGPoint location = [touch locationInNode:self];
    SKNode *node = [self nodeAtPoint:location];

    if ([node.name isEqualToString:@"DefaultChallengeMode"]) {
        defaultChallengeButton.alpha = 0.5;
        mediumChallengeButton.alpha = 1.0;
        hardChallengeButton.alpha = 1.0;

        // the game should play the default way of playing.

        [self sendInformationAboutDefaultChallenge];
    }
    if ([node.name isEqualToString:@"MediumChallengeMode"]) {
        mediumChallengeButton.alpha = 0.5;
        defaultChallengeButton.alpha = 1.0;
        hardChallengeButton.alpha = 1.0;

    }
    if ([node.name isEqualToString:@"hardChallengingMode"]) {
        hardModeButton.alpha = 0.5;
        defaultModeButton.alpha = 1.0;
        mediumModeButton.alpha = 1.0;

    }

    if ([node.name isEqualToString:@"home"]) {

        // save what ever happened in this scene

    }

}

gameScene中,我的方法来自SettingsScene ...

-(void)defaultModePlay
{
    defaultGame = YES;
}

也许我应该存储来自gameScene的信息,我不知道。 我这里没有展示这些方法......但是我希望你能跟着......

-(void)mediumModePlay;
-(void)hardModePlay;

1 个答案:

答案 0 :(得分:1)

为什么不简单地存储难度模式并使用它来确定UI应该如何显示,而不是尝试捕获每个UI元素的状态?我首先将难度模式放入enum(请参阅this article以获得最佳方法),然后将其存储在NSUserDefaults中。这看起来像[[NSUserDefaults standardUserDefaults] setInteger:difficultyLevel forKey:@"difficultyLevel"]

相关问题