Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 13.07.2012, 00:53
romzes вне форума Посмотреть профиль Отправить личное сообщение для romzes Найти все сообщения от romzes
  № 1  
Ответить с цитированием
romzes

Регистрация: Mar 2010
Сообщений: 18
По умолчанию Производительность: вызов метода объекта или изменение его публичных полей?

Я начал писать небольшой движок для игрового приложения, который хотел бы использовать впредь, расширять и модифицировать. Игра, которую я сейчас начинаю делать - двумерный платформер, основанный на тайлах. Предполагается, что будет много разных персонажей, которые перемещаются по миру, взаимодействуют с ним, взаимодействуют между собой.

Мне показалась привлекательной архитектура приложения, основанная на компонентах.

Получается, что игровой объект должен содержать экземпляры нужных ему компонентов и в своем методе update() вызывать метод update() каждого своего компонента. И каждый игровой цикл для каждого игрового объекта вызывается метод update().

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

Мне бы хотелось, чтоб персонажей в мире одновременно было достаточно много, скажем, сотня или несколько сотен, и чтоб они продолжали "жить" даже тогда, когда игрок их не видит.

Сильно ли я в таких условиях потеряю в производительности, воспользовавшись компонентной моделью и, соответственно, сильно увеличив количество вызовов методов объектов?
Может есть какой-то другой паттерн, обеспечивающий ту же гибкость в создании новых игровых объектов и стройность кода, как компонентная модель, но при этом ориентированный на производительность при работе с множеством объектов?

Буду благодарен, если подскажете мне, в каком направлении изучать этот вопрос. А то я совсем мало знаком с паттернами, применяемыми в программировании игр и с подходами к архитектуре игрового приложения.

Старый 13.07.2012, 01:03
artcraft вне форума Посмотреть профиль Отправить личное сообщение для artcraft Посетить домашнюю страницу artcraft Найти все сообщения от artcraft
  № 2  
Ответить с цитированием
artcraft
 
Аватар для artcraft

блогер
Регистрация: Aug 2005
Адрес: www.artcraft.cz
Сообщений: 1,967
Записей в блоге: 6
Отправить сообщение для artcraft с помощью ICQ
Вызов тысячи методов не слишком накладная операция.
Подозреваю что узкое место следует ожидать совсем в другом месте...
__________________
Хороший отдых - половина работы.

Старый 13.07.2012, 01:09
romzes вне форума Посмотреть профиль Отправить личное сообщение для romzes Найти все сообщения от romzes
  № 3  
Ответить с цитированием
romzes

Регистрация: Mar 2010
Сообщений: 18
artcraft, спасибо. Просто именно это вызывало у меня сомнения в возможности использовать компонентную модель, которая мне так полюбилась. Раз множество вызовов методов - не накладно, буду пробовать.

Старый 13.07.2012, 01:21
Котяра вне форума Посмотреть профиль Отправить личное сообщение для Котяра Посетить домашнюю страницу Котяра Найти все сообщения от Котяра
  № 4  
Ответить с цитированием
Котяра
буду краток
 
Аватар для Котяра

модератор форума
Регистрация: Sep 2003
Адрес: Ближайшее Замкадье
Сообщений: 3,110
Записей в блоге: 28
Отправить сообщение для Котяра с помощью ICQ Отправить сообщение для Котяра с помощью Skype™
что за компонентная модель?
__________________
Отряд Котовскага

Старый 13.07.2012, 01:29
romzes вне форума Посмотреть профиль Отправить личное сообщение для romzes Найти все сообщения от romzes
  № 5  
Ответить с цитированием
romzes

Регистрация: Mar 2010
Сообщений: 18
Я на самом деле не уверен, что это именно так по-русски называется.
Вот здесь хорошо рассказано про это - http://gameprogrammingpatterns.com/component.html
Если подскажете адекватный общепринятый термин для такого подхода - будет здорово)

Старый 13.07.2012, 01:47
expl вне форума Посмотреть профиль Отправить личное сообщение для expl Найти все сообщения от expl
  № 6  
Ответить с цитированием
expl

блогер
Регистрация: Feb 2006
Сообщений: 1,474
Записей в блоге: 3
Цитата:
Вызов тысячи методов не слишком накладная операция.
Не скажи, например алгоритм сортировки "винлайненной" проверкой < > = будет жрать чуть ли не в разы меньше, чем тот же алгоритм с вызовом compare. Вызов метода - это не самая дешёвая операция.

Не смотрите на то что на писано вверху. Прочитал пост внимательно. Рендеринг этих объектов будет отедать несравнимо больше, чем вызов этот 10-ка методов на объект. К тому же, если отказываться от компонентной модели - это не значит что получится обойтись без функций в другом месте. Не морочте себе голову, короче.

У нас в одном проекте вообще бегают по всем логическим объектам, и дергают метод рефлексии, у которого скорость выполнения ниже плинтуса. И всем всё равно - потому что сложность линейная, а оптимизировать нет смысла, т.к. это занимает около .1% от других потерь производительности.

А вот если будете мудрить с алгоритмами нелинейной сложности - тогда любая мелочь будет ощущаться.


Последний раз редактировалось expl; 13.07.2012 в 01:58.
Старый 13.07.2012, 01:52
artcraft вне форума Посмотреть профиль Отправить личное сообщение для artcraft Посетить домашнюю страницу artcraft Найти все сообщения от artcraft
  № 7  
Ответить с цитированием
artcraft
 
Аватар для artcraft

блогер
Регистрация: Aug 2005
Адрес: www.artcraft.cz
Сообщений: 1,967
Записей в блоге: 6
Отправить сообщение для artcraft с помощью ICQ
я практически уверен что трудности гораздо скорее возникнуть с отрисовкой или с ai или ещё с чем-то,

в конце концов можно написать тест и проверить
__________________
Хороший отдых - половина работы.

Старый 13.07.2012, 01:56
romzes вне форума Посмотреть профиль Отправить личное сообщение для romzes Найти все сообщения от romzes
  № 8  
Ответить с цитированием
romzes

Регистрация: Mar 2010
Сообщений: 18
Цитата:
Не морочте себе голову, короче.
Понял, спасибо ))

Добавлено через 6 часов 12 минут
expl, а что значит - алгоритмы нелинейной сложности?

Старый 13.07.2012, 09:35
Котяра вне форума Посмотреть профиль Отправить личное сообщение для Котяра Посетить домашнюю страницу Котяра Найти все сообщения от Котяра
  № 9  
Ответить с цитированием
Котяра
буду краток
 
Аватар для Котяра

модератор форума
Регистрация: Sep 2003
Адрес: Ближайшее Замкадье
Сообщений: 3,110
Записей в блоге: 28
Отправить сообщение для Котяра с помощью ICQ Отправить сообщение для Котяра с помощью Skype™
Ага, понял. В Unity3d такая же архитектура. Но только называть наверное лучше компонентная архитектура. Просто за словом "модель", многим (как и мне) сразу мерещится MVC.
__________________
Отряд Котовскага

Старый 13.07.2012, 12:41
expl вне форума Посмотреть профиль Отправить личное сообщение для expl Найти все сообщения от expl
  № 10  
Ответить с цитированием
expl

блогер
Регистрация: Feb 2006
Сообщений: 1,474
Записей в блоге: 3
Цитата:
expl, а что значит - алгоритмы нелинейной сложности?
http://ru.wikipedia.org/wiki/Вычислительная_сложность
Например у сортировки объектов сложность выше линейной. У бинарного поиска - меньше. Не берите в голову.

Создать новую тему Ответ Часовой пояс GMT +4, время: 18:37.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Теги
компонентная модель , метод , паттерн , производительность , публичные поля

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 18:37.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.