|
|
|||||
strange mood
|
Как лучше двигать объекты в игре?
Космическая стрелялка. Типа там кораблик, астероиды, может ещё кораблики. Для каждого объекта есть координаты и скорость.
Так вот, перемещение этих объектов можно сделать двумя способами: 1. Объект перемещается сам. Т.е. у него есть некий метод move, и движок игры в цикле перебирает все объекты и дёргает у них этот метод. 2. Объекты перемещает движок. Т.е. он в цикле перебирает объекты, берёт их координаты и скорости, высчитывает новые значения и ставит объект на новые координаты. Распишите пожалуйста плюсы и минусы каждого подхода. Лично я склоняюсь ко второму варианту, тк во-первых он мне кажется более правильным, а во-вторых позволяет правильно просчитывать столкновения на больших скоростях: после рассчёта координат объекта движок может проверить, не пересекается ли его траектория с рассчётной траекторией другого объекта поблизости. Кстати пока это писал, пришла идея гибридного варианта: объекты двигаются сами, но ещё обладают методами, которые возвращают рассчётные координаты и скорость. Движок их проверяет, и если всё ок, то вызывает move. В общем жду ваших мнений.
__________________
тонкий тролль, осеянный благодатью |
|
|||||
[+1 14.08.08]
[+1 20.08.08] |
второй вариант чуть хуже:
1) захламляется и становится слишком объемным класс сцены 2) при переборе объектов сцены приходится как-то определять тип объекта, и в зависимости от типа объекта выполнять конкретное действие, а в первом варианте надо просто вызвать функцию move, которая является общей (базовой) для всех элементов сцены. а вообще не стоит зацикливаться на таких мелочах. Часто напишешь код, а потом думаешь: "нет, фигня получилась, надо переделать". И начинаешь переименовывать функции, переносить функционал из одного класса в другой, разбивать функцианал в разные элементарные классы. Это все ненужно. Это топтание на месте. Как первый раз написали - так пусть и будет.
__________________
~ Never trouble trouble till trouble troubles you! |
|
|||||
strange mood
|
Chas, это не топтание на месте, а рефакторинг - очень даже нужный процесс. Просто я предпочитаю проводить его до того, как начинаю писать код
Насчёт типов объектов пока думаю. TERRORist, что вы имеете в виду? Я собираюсь хранить объекты в массиве и перебирать этот массив.
__________________
тонкий тролль, осеянный благодатью |
|
|||||
[+1 14.08.08]
[+1 20.08.08] |
второй способ быстрее, только если у тебя один/два типа объектов. Если у тебя их десять?
2GAIKER: Рефакторингом можно заниматься неделями. Придумывание архитектуры неделями без написания фактического кода часто является оправданием собственной лени. В данном случае является не слишком актуальным какой способ выбрать (у вас тысячи объектов?). Можно просто кинуть монетку.
__________________
~ Never trouble trouble till trouble troubles you! |
|
|||||
strange mood
|
Chas, в большинстве случаев написание фактического кода без придумывания архитектуры неделями приводит к тому, что приходится всё сносить и начинать заново, затратить те же недели на придумывание архитектуры, но потеряв впустую то время, которое ушло на первый вариант.
Я делаю игру не по чьему-то заказу, а для самообучения, так что мои сроки неограничены. И моя цель состоит не в том, чтобы просто сделать работающую игру, а чтобы сделать работающую игру с архитектурой, близкой к идеальной. Я могу спокойно сделать и так и эдак, но мне важно именно нахождение наилучших решений для такого рода глобальных вопросов.
__________________
тонкий тролль, осеянный благодатью |
|
|||||
ну я думаю вы знакомы с шаблоном mvc помоему отличный вариант для игры. А ваши варианты они каждый по своему хороши, но тут говорят что мол могут быть всякие проблемы с разными поведениями для разных обьектов. для описания этих разностей может отлично подойти один из столпов ооп - полиморфизм.
Ну если честно. то вот вам мой совет. Если для самообучения. то подумайте над архитектурой 30 минут. потом попейте чаю и еще раз взгляните на план. поправьте и начинайте писать. Идеал вы не напишите даже если неделю будете трудится над описанием и тд и тп. По ходу дела вы будете сами видеть как можно было бы сделать лучше. что то исправите по ходу(рефакторинг необязательно надо делать в конце проекта), что то просто возьмете на заметку. Совершенные вами ошибки, ну при условии что вы их найдете, увидите, будут для вас лучшим обучением. тут только практика. Я свой 3д движочек 5 раз переписывал. Только сейчас я довел все до уровня когда мне почти все нравится. главное самокритика. ну и поповоду плана. такие планы к концу проекта обрастают всякими добавками. и от того что было в начале врятли что то останется. нужно быть достаточно опытным чтобы создать сразу хороший план и архитектуру. у меня был пример, когда я планировал одну программку, намечалось около 18 классов, сейчас классов 43 и проект еще не закончен. |
|
|||||
Регистрация: Jun 2006
Сообщений: 164
|
Имхо, тест-код-рефакторинг, тест-код-рефакторинг....
|
|
|||||
блогер
Регистрация: Jun 2005
Адрес: Господи пожалуйста не Новосибирск
Сообщений: 6,598
Записей в блоге: 17
|
Ну, зато если написать этот движок грамотно - его можно будет использовать потом снова в другом проекте. А если писать для каждого свой move() - при деться писать все с 0...
Тут действительно монетка.
__________________
Тут мужик танцует и поёт про флэш |
|
|||||
Регистрация: Jun 2006
Сообщений: 164
|
А надо ли с первой игры сразу зарубаться в такие дебри? Мне кажется лучше сначала попорхать как бабочка с одного аспекта ria разработки на другой и понять соль каждого, мало ли с чем придется потом работать, не факт, что в геймдеве...
|
Часовой пояс GMT +4, время: 00:56. |
|
« Предыдущая тема | Следующая тема » |
|
|