|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
Регистрация: Mar 2010
Сообщений: 18
|
Производительность: вызов метода объекта или изменение его публичных полей?
Я начал писать небольшой движок для игрового приложения, который хотел бы использовать впредь, расширять и модифицировать. Игра, которую я сейчас начинаю делать - двумерный платформер, основанный на тайлах. Предполагается, что будет много разных персонажей, которые перемещаются по миру, взаимодействуют с ним, взаимодействуют между собой.
Мне показалась привлекательной архитектура приложения, основанная на компонентах. Получается, что игровой объект должен содержать экземпляры нужных ему компонентов и в своем методе update() вызывать метод update() каждого своего компонента. И каждый игровой цикл для каждого игрового объекта вызывается метод update(). Я, однако, часто встречал мнение, что вызов метода объекта работает медленнее, чем изменение его публичных полей напрямую кодом извне. Исходя из этого, не стоит каждый игровой цикл вызывать метод update() каждого объекта, а лучше изменять его поля кодом в обработке игрового цикла. Такой подход, как я понимаю, не совместим с архитектурой, основанной на компонентах. Мне бы хотелось, чтоб персонажей в мире одновременно было достаточно много, скажем, сотня или несколько сотен, и чтоб они продолжали "жить" даже тогда, когда игрок их не видит. Сильно ли я в таких условиях потеряю в производительности, воспользовавшись компонентной моделью и, соответственно, сильно увеличив количество вызовов методов объектов? Может есть какой-то другой паттерн, обеспечивающий ту же гибкость в создании новых игровых объектов и стройность кода, как компонентная модель, но при этом ориентированный на производительность при работе с множеством объектов? Буду благодарен, если подскажете мне, в каком направлении изучать этот вопрос. А то я совсем мало знаком с паттернами, применяемыми в программировании игр и с подходами к архитектуре игрового приложения. |
|
|||||
Регистрация: Mar 2010
Сообщений: 18
|
artcraft, спасибо. Просто именно это вызывало у меня сомнения в возможности использовать компонентную модель, которая мне так полюбилась. Раз множество вызовов методов - не накладно, буду пробовать.
|
|
|||||
буду краток
модератор форума
Регистрация: Sep 2003
Адрес: Ближайшее Замкадье
Сообщений: 3,110
Записей в блоге: 28
|
что за компонентная модель?
__________________
Отряд Котовскага |
|
|||||
Регистрация: Mar 2010
Сообщений: 18
|
Я на самом деле не уверен, что это именно так по-русски называется.
Вот здесь хорошо рассказано про это - http://gameprogrammingpatterns.com/component.html Если подскажете адекватный общепринятый термин для такого подхода - будет здорово) |
|
|||||
Цитата:
Не смотрите на то что на писано вверху. Прочитал пост внимательно. Рендеринг этих объектов будет отедать несравнимо больше, чем вызов этот 10-ка методов на объект. К тому же, если отказываться от компонентной модели - это не значит что получится обойтись без функций в другом месте. Не морочте себе голову, короче. У нас в одном проекте вообще бегают по всем логическим объектам, и дергают метод рефлексии, у которого скорость выполнения ниже плинтуса. И всем всё равно - потому что сложность линейная, а оптимизировать нет смысла, т.к. это занимает около .1% от других потерь производительности. А вот если будете мудрить с алгоритмами нелинейной сложности - тогда любая мелочь будет ощущаться. Последний раз редактировалось expl; 13.07.2012 в 01:58. |
|
|||||
я практически уверен что трудности гораздо скорее возникнуть с отрисовкой или с ai или ещё с чем-то,
в конце концов можно написать тест и проверить
__________________
Хороший отдых - половина работы. |
|
|||||
Регистрация: Mar 2010
Сообщений: 18
|
Цитата:
Добавлено через 6 часов 12 минут expl, а что значит - алгоритмы нелинейной сложности? |
|
|||||
буду краток
модератор форума
Регистрация: Sep 2003
Адрес: Ближайшее Замкадье
Сообщений: 3,110
Записей в блоге: 28
|
Ага, понял. В Unity3d такая же архитектура. Но только называть наверное лучше компонентная архитектура. Просто за словом "модель", многим (как и мне) сразу мерещится MVC.
__________________
Отряд Котовскага |
|
|||||
Цитата:
Например у сортировки объектов сложность выше линейной. У бинарного поиска - меньше. Не берите в голову. |
Часовой пояс GMT +4, время: 18:37. |
|
« Предыдущая тема | Следующая тема » |
Теги |
компонентная модель , метод , паттерн , производительность , публичные поля |
|
|