Ожидается ')' до ';'ошибка токена? - PullRequest
1 голос
/ 25 марта 2011

Я создаю приложение для Iphone, и оно работает с помощью NSTimer, который вызывает - (void) gameLoop каждую шестидесятую секунду.Вот игровой цикл

-(void)gameLoop {

 paratrooperTimer += 1;

if (gameState == KGameStateBegin) {
    BtnStart.hidden = 0;
    BtnResume.hidden = 1;
    BtnPause.hidden = 1;
} 
else if (gameState == KGameStateRunning) {

    BtnStart.hidden = 1;
    BtnPause.hidden = 0;

    [self playGameLoop];
}
else if (gameState == KGameStatePaused) {

    BtnResume.hidden = 0;
    BtnPause.hidden = 1;
}
else if (gameState == KGameStateGameOver) {

    [self endGame];
}
else if (paratrooperTimer == 120) {

    (paratrooperTimer = 0);
    [self spawnParatrooper];

}



}

Я получаю сообщение об ошибке «Ожидается») перед «;»token "в каждом операторе if и в строке ParatrooperTimer + = 1.

GameState и Integer, как и все KGameState ....Помогите мне, пожалуйста!Спасибо большое

Ответы [ 4 ]

2 голосов
/ 25 марта 2011

Это не ваш вопрос, но вы подняли для меня красный флаг, с которым я столкнулся раньше, и вы, вероятно, были бы признательны за предварительное предупреждение.

NSTimer стреляет вконец цикла событий.Это не метроном - его вызывают, когда его вызывают, и он может быть не совсем регулярным.Долгий процесс, блокирующий приложение, не позволит вовремя запустить NSTimer.Также NSTimer имеет максимальное разрешение 50-100 мс (согласно документам).Так что в ЛУЧШЕМ случае он будет срабатывать 20 раз в секунду, и вы пытаетесь запросить у него разрешение, в три раза более высокое, чем это.

Для вещей с более низким разрешением NSTimer хорош, но для импульсатак быстро, как вы хотите, это, вероятно, не работает вообще.Но тогда, вам действительно нужно 60 кадров / сек?

1 голос
/ 25 марта 2011

Возможно, у вас есть несбалансированная скобка где-то выше - (void)gameLoop, или, возможно, вы пропустили точку с запятой из объявления метода - (void)gameLoop; в вашем файле .h (но я думаю, что это даст вам другое сообщение об ошибке).

0 голосов
/ 25 марта 2011

Я бы заподозрил либо опечатку в скобках, либо недействительную подпись таймера.

Пример таймера:

self.timer = [NSTimer scheduledTimerWithTimeInterval:60.0   
                                              target:self   
                                            selector:@selector(timerHandler:) 
                                            userInfo:nil
                                             repeats:YES];

, где timerHandler определяется как:

- (void)updateTimeView:(id)inTimer;  

Во всяком случае, почему вы не используете switch-case заявление?С большим количеством if это может помочь сохранить читабельность кода, поэтому опечатки в скобках могут быть найдены проще и быстрее. Описание переключателя

0 голосов
/ 25 марта 2011

Вы должны добавить (NSTimer *) aTimer к своей подписи функции следующим образом:

-(void)gameLoop :(NSTimer *) aTimer

и в селекторе [NSTimer scheduleWithTimeInterval... необходимо добавить точку с запятой:

@selector(gameLoop:)

Что касается вашей функции:

о чем эта строка в вашем последнем операторе if и зачем вам там скобки?

(paratrooperTimer = 0);

Вероятно, это является причиной ошибки компилятора

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...