В настоящее время я строю простую игру, используя чистый UIKit. В моем игровом контенте MVC у меня есть объект таймера CADisplayLink, который активируется в игре и неоднократно вызывает метод gameLogic для отображения новых объектов. Метод вычисляет и обновляет позиции объекта на экране. FrameInterval моих таймеров - 2 кадра. Теперь мне нужно как-то установить интервал повторного появления новых объектов на экране. Решением, которое я использовал до сих пор, является использование статического счетчика в методе gameLogic. Вот фрагмент метода:Простая игра UIKit: что такое хороший подход для многократного ввода новых объектов на экран?
-(void)gameLogic{
static int timeCounter = 0;
if ((timeCounter % 50)==0){
[self addItemToScreen];
}
...
timeCounter++;
На каждом 50-м цикле выполнения метода GameLogic, я ставлю новый объект на экране. Остальный код метода gameLogic репозиционирует существующие объекты. В настоящее время все управляется только одним таймером. Другим решением, которое IMHO должно работать, является наличие отдельного таймера для добавления новых объектов на экран. Но я не уверен, это лучшее решение, и они будут успешно работать одновременно. Каково ваше мнение об этих подходах? Какие другие решения вы планируете использовать?
Большое спасибо. Я слышал об уведомлениях, но пока не использую их. Звучит многообещающе, чтобы объекты экрана прослушивали передаваемые уведомления. В этом случае нужно ли регистрировать каждый объект в качестве наблюдателя (addObserver: selector: name: object :) в центр уведомлений по умолчанию? А затем в моем методе GameLogic неоднократно публикуйте уведомления? – Centurion
Также очень интересно, как широковещательные сообщения распространяются между объектами/наблюдателями. Есть ли параллелизм? Для моей игры очень важно, чтобы каждый объект/наблюдатель получал сообщение и только одно сообщение в одном цикле таймера из NSNotificationCenter. Например, если на экране будет 10 объектов, то это будет неприемлемо, если какой-либо объект будет замедлен или начнет двигаться быстрее, чем другие :) – Centurion
Отправленное уведомление происходит в одном и том же цикле цикла, поэтому все объекты, зарегистрированные в центре уведомлений, получат уведомление по существу в одно и то же время (или, по крайней мере, в одном и том же цикле). И да, вам нужно будет иметь каждый объект, который вы хотите отреагировать на регистр уведомлений с помощью addObserver: selector: name: object. Также убедитесь, что вы сделали '[[NSNotificationCenter defaultCenter] removeObserver: self]' при освобождении объектов, зарегистрированных в NSNotificationCenter. В противном случае вы получите утечки памяти и другие плохие вещи. – gdavis