【问题标题】:BOOL gives different result in if statement at update:(CFTimeInterval)currentTime methodBOOL 在 if 语句中在 update:(CFTimeInterval)currentTime 方法中给出不同的结果
【发布时间】:2016-08-21 19:15:27
【问题描述】:

我有两个场景 - DifficultSceneGameScene。在DifficultScene 我有三个按钮——简单、中等和困难。我使用全局变量 Bool 来跟踪当前的难度级别。当我尝试简单模式时,一切正常,但是当我尝试中等或困难时,布尔值每秒都在变化,从困难跳到中等和简单,使游戏无法玩。 我的问题是 - 我该如何解决?以下是发生这种情况的代码:
GamesScene.m

-(void)update:(CFTimeInterval)currentTime {
/* Called before each frame is rendered */
extern BOOL isEasyMode;
extern BOOL isMediumMode;
extern BOOL isHardMode;
if ((isEasyMode = YES)) {
    NSLog(@"easy");
    [self computer];
}
if ((isMediumMode = YES)) {
    NSLog(@"medium");
    [self computerMedium];
}
if ((isHardMode = YES)) {
    NSLog(@"hard");
    [self computerHard];
}

[self scoreCount];
}

(如果需要更多代码,我会发布)

【问题讨论】:

  • 你的意思是if (a == b): double "="?而且您似乎没有设置它们。但是您可能对枚举而不是 3 bool 感兴趣?
  • @Larme 感谢您的回复,但我对目标 c 有点陌生,我不知道如何使用枚举,如果不难,您能展示一下吗?

标签: ios objective-c sprite-kit boolean skscene


【解决方案1】:

我认为您的更新方法会根据计时器定期调用,因此如果是这样,它将被连续调用。这就是我认为发生这种情况的原因,另一个重要的事情是您应该使用== 进行比较。您正在使用(isEasyMode = YES),这意味着您将YES 分配给isEasyMode

所以将所有 if 语句(如 if ((isEasyMode = YES)))替换为 if (isEasyMode == YES)

更新:

if 语句应该喜欢,

  if (isEasyMode == YES) {
    NSLog(@"easy");
    [self computer];
}

希望这会有所帮助:)

【讨论】:

  • 感谢您的回复,但它对我不起作用,它给了我警告“用多余括号进行平等比较”
  • 我认为你做错了,你的 if 语句应该是 if (isEasyMode == YES) { NSLog(@"easy"); // [自己的电脑]; }
  • 检查答案中的更新并在bool之前删除extern
  • 好吧,它有点工作,如果我删除extern 那么它不起作用,但除此之外,代码工作。谢谢
  • 不客气... :) 如果您觉得它有帮助,请投票给答案 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-18
  • 2019-12-19
  • 1970-01-01
相关资源
最近更新 更多