如何在游戏中创建不同的状态,即gameStatePlaying

时间:2014-05-21 16:27:58

标签: ios objective-c properties

我试图在我制作的游戏中创建不同的状态,这样我就可以使用计时器检查不同的东西,例如游戏等。

这是我到目前为止所提出的:

typedef enum:NSInteger {
    gameStateBegin,
    gameStatePlaying,
    gameStateOver,
    gameStateWining
}gameState;

并且

- (void)onTimer {
    switch (self.state) {
        case gameStateBegin: {
            startTime = currentTime;
            self.state = gameStatePlaying;
            break;
        }
        case gameStatePlaying: {
            countDownInt = 10.0 - (int)(currentTime - startTime);
            if (countDownInt>0) {
                countDown.text = [NSString stringWithFormat:@"TIME REMAINING: %i", countDownInt];
            }
            else if (countDownInt <= 0) {
                self.state = gameStateOver;
            }
            break;
        }
        case gameStateOver: {
            self.state = gameStateWining;
            [self runAction:[SKAction sequence:@[
                                                 [SKAction runBlock:^{
                countDown.text = @"";
            }],
                                                 [SKAction waitForDuration:0.5],
                                                 [SKAction runBlock:^{
                //transition

            }],
                                                 ]]];
            break;
        }
        default:
            break;
    }
}

但它让我很难告诉我,我需要一个州的财产。所以我创建了以下属性:

@property gameState * state;

但那不起作用,它说&#34;声明需要表达整数类型(&#39; gameState *&#39;无效)

所以我完全难过了。我甚至不知道我是否正确地接近了这一点。

任何人都可以知道我可以使用什么类型的属性来使此开关在此方法中工作。 此外,如果有人有更好的方法,请建议!!

2 个答案:

答案 0 :(得分:3)

首先,你应该使用这个新的iOS MACRO:NS_ENUM

typedef NS_ENUM(NSInteger, GameState) {
    GameStateBegin,
    GameStatePlaying,
    GameStateOver,
    GameStateWining
};

这种方法更适合编译器类型检查而不是经典enum

对于属性,删除*因为不是对象而是基元int

@property (nonatomic) GameState state;

答案 1 :(得分:1)

删除*。 NSIntegers没有指针:)

@property (nonatomic) gameState state;

此外,你似乎在怀疑,但你正在以正确的方式做到这一点。