BOOL дает другой результат в операторе if при обновлении: (CFTimeInterval) метод currentTime

У меня две сцены - DifficultScene и GameScene. В 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];
}

(если нужно больше кода, я опубликую его)


person artG    schedule 27.04.2016    source источник
comment
Вы имеете в виду if (a == b): двойной =? А ты их вроде не ставишь. Но вас может заинтересовать enum, а не 3 bool?   -  person Larme    schedule 27.04.2016
comment
@Larme спасибо за ваш ответ, но я новичок в target c, и я не знаю, как использовать enum, если это не сложно, можете ли вы это показать?   -  person artG    schedule 27.04.2016


Ответы (1)


Я думаю, что ваш метод обновления периодически вызывается в соответствии с таймером, поэтому он будет вызываться постоянно, если это так. Вот почему я думаю, что это происходит, и еще одна важная вещь заключается в том, что вы должны использовать == для сравнения. вы используете (isEasyMode = YES), это означает, что вы назначаете YES на isEasyMode.

Поэтому замените все операторы if, такие как if ((isEasyMode = YES)), на if (isEasyMode == YES).

Обновление:

если заявление должно понравиться,

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

Надеюсь, это поможет :)

person Ketan Parmar    schedule 27.04.2016
comment
спасибо за ваш ответ, но это не сработало для меня, это дало мне предупреждение Сравнение равенства с посторонними скобками - person artG; 27.04.2016
comment
Я думаю, что вы сделали ошибку, ваш оператор if должен выглядеть так: if (isEasyMode == YES) { NSLog(@easy); // [собственный компьютер]; } - person Ketan Parmar; 27.04.2016
comment
Также проверьте обновление в ответе и удалите extern перед bool - person Ketan Parmar; 27.04.2016
comment
ну вроде работает, если убрать extern то не работает, но кроме этого код работает. благодарю вас - person artG; 27.04.2016
comment
пожалуйста... :) Если вы чувствуете, что это полезно, проголосуйте за ответ :) - person Ketan Parmar; 27.04.2016