Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何在获得一定分数后解锁功能_Ios_Objective C - Fatal编程技术网

Ios 如何在获得一定分数后解锁功能

Ios 如何在获得一定分数后解锁功能,ios,objective-c,Ios,Objective C,好的,我想在游戏中获得一定分数后解锁一个新角色。我有我的高分机制设置,这样一个名为score number的整数在游戏结束时根据计时器系统识别分数,并将其设置为新的高分,假设你得到了更好的分数。然后它会将整数重置回0。这里的问题是,我不能说如果:整数读取超过30,然后解锁此功能,因为它重置为0。所以我的问题是:是否有其他方法可以在游戏中解锁此功能而不使用此方法。非常感谢 我不明白为什么在将int重置为0之前不能这样做: if (scorenumber == 30) { // unlock

好的,我想在游戏中获得一定分数后解锁一个新角色。我有我的高分机制设置,这样一个名为score number的整数在游戏结束时根据计时器系统识别分数,并将其设置为新的高分,假设你得到了更好的分数。然后它会将整数重置回0。这里的问题是,我不能说如果:整数读取超过30,然后解锁此功能,因为它重置为0。所以我的问题是:是否有其他方法可以在游戏中解锁此功能而不使用此方法。非常感谢

我不明白为什么在将int重置为0之前不能这样做:

if (scorenumber == 30) {
    // unlock new level
} else if (scorenumber == 100) {
    // unlock another level
}

假设您有两个不同的分数值,currentScore和highScore

将highScore保存到用户NSUserDefaults

在每轮结束时,将新分数与高分进行比较。如果新分数较高,请将其保存到high score NSUserDefaults键


然后使用highScore确定解锁的级别。

有几种方法可以处理此问题。您可以使用位标志或特定标志来指示某些内容是否已解锁

例如,你可以这样做

typedef NS_ENUM(NSUInteger, Unlockable) {
    UnlockableA = 1,
    UnlockableB = 2,
};

@property (nonatomic, assign) NSUInteger unlockables;

// Code for checking score and unlockables.
// Hardcoding these values is bad, but just doing this for convenience now
if (self.scorenumber >= 30) {
    if (self.unlockables & UnlockableA) {
        // Unlock A
        self.unlockables |= UnlockableA;
    }
}

// Note this is not an else if, so you can award it in cases 
// if you had score numbers incrementing at arbitrary values
if (self.scorenumber >= 100) {
    if (self.unlockables & UnlockableB) {
        // Unlock B
        self.unlockables |= UnlockableB;
    }
}
代码没有经过编译、准确性等测试

您必须确保持久化unlockables,这也意味着在开始时读取它

如果您选择特定的变量路径,您会执行以下操作:

@property(nonatomic, assign) BOOL unlockedA;
你可以从这里找到剩下的

另一种选择是使用NSDictionary将BOOL作为NSNumber保存


还有其他方法可以做到这一点,但这些都是低效的方法。

根据他所写的,这是行不通的。分数重置为0,因此您将多次通过scorenumber。此外,您假设他的每次得分为+1。情况可能并非如此。顺便说一句,是的,他说是基于计时器的,但是没有任何东西表明你可以从某个动作/事件中获得更多的分数。在这种情况下,他不能用他的highscore int而不是scorenumber来解锁if语句吗?假设我想取消隐藏一个按钮作为游戏的功能。在这个例子中,我应该把代码放在哪里?