Удаление объекта с таймером - PullRequest
1 голос
/ 25 июля 2011

У меня есть два NSMutableArrays, коллекционные и коллекционные виды.

Мое приложение состоит из персонажа, который перемещается и собирает коллекционные предметы (монеты, яблоки, бананы и т. Д.) Для очков ...

Iхотел бы, чтобы предметы коллекционирования исчезли через определенное время ... однако меня смущает вопрос о том, куда поместить NSTimer, чтобы не нарушать дизайн модели / вида / контроллера.

Например, если я ставлю отдельное лицотаймер в каждой модели, модель не знает о представлении и не может удалить представление ..

Если я добавлю NSTimer в контроллер, мне нужно будет создать еще один массив, состоящий из всех коллекционных объектов наэкран, порядок которого истекает первым.Метод таймера срабатывает каждую секунду и удаляет каждую коллекцию, когда они должны.

Есть ли более простой и лучший способ сделать это?

Ответы [ 2 ]

2 голосов
/ 25 июля 2011

Большинство игр моделируют этот вид «мониторинга состояния» с использованием одного или нескольких игровых часов.Вы можете сделать что-то вроде этого:

  1. Создать структуру данных, содержащую время продолжительности, указатель на функцию и массив переменных объекта.Для этого примера давайте назовем его DecayEvent.
  2. Создайте статический, изменяемый массив DecayEvent в вашем переднем (главном) контроллере с некоторыми хорошими методами доступа
  3. Выберите подходящий интервал обработки событий.Он должен быть достаточно большим, чтобы обрабатывать, как вы думаете, максимальное количество событий, но достаточно маленьким, чтобы не тормозить взаимодействие с пользователем.
  4. Создайте метод на вашем фронт-контроллере, который будет обрабатывать через массив событий затухания,Каждый раз, когда метод вызывается, он будет выполнять итерацию массива и уменьшать продолжительность события на интервал обработки события.Если продолжительность событий затухания падает ниже нуля, тогда «запустите событие» (в основном, запустите его функцию обратного вызова в другом потоке с аргументами обратного вызова).
  5. Создайте NSTimer в вашем основном потоке.Установите его так, чтобы он вызывал ваш метод обработки при каждом интервале обработки событий.

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

Удачи!

1 голос
/ 25 июля 2011

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

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