Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Производительность: вызов метода объекта или изменение его публичных полей? (http://www.flasher.ru/forum/showthread.php?t=182133)

romzes 13.07.2012 00:53

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

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

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

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

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

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

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

artcraft 13.07.2012 01:03

Вызов тысячи методов не слишком накладная операция.
Подозреваю что узкое место следует ожидать совсем в другом месте...

romzes 13.07.2012 01:09

artcraft, спасибо. Просто именно это вызывало у меня сомнения в возможности использовать компонентную модель, которая мне так полюбилась. Раз множество вызовов методов - не накладно, буду пробовать.

Котяра 13.07.2012 01:21

что за компонентная модель?

romzes 13.07.2012 01:29

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

expl 13.07.2012 01:47

Цитата:

Вызов тысячи методов не слишком накладная операция.
Не скажи, например алгоритм сортировки "винлайненной" проверкой < > = будет жрать чуть ли не в разы меньше, чем тот же алгоритм с вызовом compare. Вызов метода - это не самая дешёвая операция.

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

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

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

artcraft 13.07.2012 01:52

я практически уверен что трудности гораздо скорее возникнуть с отрисовкой или с ai или ещё с чем-то,

в конце концов можно написать тест и проверить

romzes 13.07.2012 01:56

Цитата:

Не морочте себе голову, короче.
Понял, спасибо ))

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

Котяра 13.07.2012 09:35

Ага, понял. В Unity3d такая же архитектура. Но только называть наверное лучше компонентная архитектура. Просто за словом "модель", многим (как и мне) сразу мерещится MVC. :)

expl 13.07.2012 12:41

Цитата:

expl, а что значит - алгоритмы нелинейной сложности?
http://ru.wikipedia.org/wiki/Вычислительная_сложность
Например у сортировки объектов сложность выше линейной. У бинарного поиска - меньше. Не берите в голову.

romzes 13.07.2012 12:59

expl, о, спасибо. Интересно! Грамотность у меня хромает(

Котяра, согласен. Я тоже столкнулся с такой путаницей - по поисковым запросам, в которых было слово "модель", много по MVC находилось.


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

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