我还是业余爱好者。当我按下主页按钮时,我想在SettingsScene
中保存信息。此信息包含每个按钮的alpha
,游戏应该知道调用defaultModePlay
(检查sendInformationAboutDefaultChallenge
和SettingsScene.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;
答案 0 :(得分:1)
为什么不简单地存储难度模式并使用它来确定UI应该如何显示,而不是尝试捕获每个UI元素的状态?我首先将难度模式放入enum
(请参阅this article以获得最佳方法),然后将其存储在NSUserDefaults
中。这看起来像[[NSUserDefaults standardUserDefaults] setInteger:difficultyLevel forKey:@"difficultyLevel"]
。