2009-10-17 3 views
1

Написание 4-игрового приложения для iPhone с программируемым сочетанием людей/автокомпьютеров. После того, как каждый игрок переключится, «игровой режим» должен обновиться. Я использовал «setNeedsDisplay» для обновления этого представления. Однако это представление обновляется только тогда, когда мой код обработки обработки «завершен», и он ждет нажатия человеческого игрока, чтобы снова запустить этот код.Обновление iPhone без ввода пользователем

Для автокомпьютеров дисплей обновляется только в том случае, если он снова ждет очередной ход игрока. Следовательно, для всей игры для автокомпьютеров вся игра разыгрывается сначала (завершение приложения) до того, как setNeedsDisplay рисует один раз - показывая конечные позиции в режиме просмотра.

Есть ли хороший способ, чтобы повороты автокомпьютерных игроков обновляли представление раз в каждый ход с такой скоростью, чтобы игроки-люди могли видеть (например, один раз в секунду)?

Спасибо заранее,

Стив

ответ

1

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

В крайнем случае, однако, вы можете сделать это, чтобы обновить экран сразу после вызова setNeedsDisplay:

[[NSRunLoop currentRunLoop] acceptInputForMode: NSDefaultRunLoopMode beforeDate: ноль];

Вы должны быть немного осторожны с ним, потому что другие вызовы в очереди могут быть вызваны вызовом. (Например, на Mac сообщения с распределенными объектами будут запускаться, например)

+0

Спасибо! Это сработало отлично. Я также рассмотрю реализацию многопоточности. В конце концов, я просто парень-алгоритм :-) – 2009-10-18 02:29:48

-3

как о

[myView.layer display]; 
+0

В общем, вы никогда не должны вызывать 'display' напрямую, а скорее' setNeedsDisplay' (для планирования чертежа ОС). –

Смежные вопросы