Где разместить фрагмент кода для события, которое может произойти в любое время? - PullRequest
2 голосов
/ 27 ноября 2011

Я разрабатываю простую игру для Android и хочу обнаружить коллизию между двумя спрайтами и удалить их. У меня есть идея о том, каким будет код, но я не знаю, где (в случае чего) я быПоместите это ... Спрайты движутся на экране, так что это "событие" может произойти в любое время, а не только на TouchEvent или что-то в этом роде.

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

1 Ответ

3 голосов
/ 27 ноября 2011

На самом деле @Nammari прав, у вас, вероятно, есть петля внутри вашего двигателя, которая перемещает спрайтов, что-то, что движок имитирует микрообороты: все спрайты движутся со своей скоростью.

Внутри этого цикла вы простонужно проверять столкновения и удалять ненужные спрайты.

Все это должно происходить в классе, отдельном от самого действия.

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

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

Лучший ответ: вы войдете в новый мир: архитектура программного обеспечения.;) Да, это больше не о «кодировании», а о чистых способах сделать это (и о красоте и искусстве, но это может быть более философским вопросом на самом деле).

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

  • ваш игровой движок (класс, отвечающий за перемещение спрайтов, зная «правила»)) должен стать источником событий
  • вы должны определить интерфейс для ваших "слушателей игры", на этом этапе он может иметь единственный метод: обнаружение столкновения.
  • ваш движок должениметь список слушателей с сильной инкапсуляцией и двумя открытыми методами для добавления и удаления слушателей.
  • он также должен иметь некоторый закрытый / защищенный метод для запуска события: он проходит по всем зарегистрированным слушателям и вызывает их «столкновение»обнаружено "метод.
  • , затем создайте небольшой внутренний класс в вашем представлении, реализуя интерфейс слушателя.Instanciate и зарегистрируйте его среди двигателя.

Это основная идея. Здесь - хороший вводный пример для всего этого.

...