Страницы

Поиск по вопросам

четверг, 21 марта 2019 г.

Передача объектов в игре между классами

Я пишу небольшую игру на JavaScript (ES6). Есть в игре объекты, такие как Camera, Scene и тд, к которым очень часто нужен доступ. Сначала я делал так:
Есть объект Game, в нем есть gameProto.camera = new Camera(this), gamepProto.scene = new Scene(this) и везде передавал объект игры, абсолютно везде. Объект Game передавался почти во все конструкторы, где мне нужен был доступ к сцене и камере.
Не так давно я разобрал Swift и мне очень понравились "общие" объекты. Например NSApplication.Shared() - вероятно, это синглтон. Подумал я и решил сделать также. Camera.Shared - стал статичный объект общей камеры. Scene.Main - стал статичный объект главной сцены (а она одна на всю игру, как и камера). Теперь я перестал передавать во все конструкторы объект игры и стал использовать "общие" объекты, сделав игру модульной.
В чем собственно сам вопрос? В смысле оптимизации - как же лучше передавать объекты: ссылками в конструкторы или использовать "общий" статичный объект? А может и нет разницы вообще?


Ответ

Добрый день! Постараюсь ответить на ваш вопрос, хотя это немного сложно поскольку он очень общий 🙂
Следуйте рекомендациям создателей движка на котором вы пишите игру. Обычно эти советы базируются на конкретной реализации внутренних механизмов вашего движка. Если уж совсем нет рекомендаций можно посмотреть что делают другие люди на этом же движке. Используйте здравый смысл. Зачастую, если есть несколько вариантов как реализовать ту или иную функциональность и разница в производительности этих вариантов незначительна, то мой вам совет - выбирайте ту которая проще. Не нужно делать сложно то что, возможно, никогда вам больше не потребуется. Отсюда следующее. Концентрируетесь на готовом продукте. Почему? Потому что я видел миллионы мертвых проектов (включая мои собственные) в которых разработчики пытались всё заоптимизировать до смерти и эти проекты не доживали до релиза. Прошу заметить: я не призываю вас писать низкосортный код, я предлагаю сосредоточится на результате. А вот когда у вас уже есть готовый продукт, тогда уже можно его оптимизировать. Относитесь взвешенно к советам от "гуру" и "экспертов", иногда они только мешают. "Тебе обязательно нужно TDD а также DI для IoC и если у тебя нет CI то ты просто вообще непонятно как живешь!" Оно конечно всё очень хорошо, но пожалуй только если у тебя команда из как минимум пяти человек, ну а если нет - можно и без этого, поверьте на слово 🙂 Если хотите более мудрое описание в виде притчи - оно ниже ПРИТЧИ: Отец, сын и осёл Как-то раз отец со своим сыном и ослом в полуденную жару путешествовали по улицам города. Отец сидел верхом на осле, а сын вёл его за уздечку. — Бедный мальчик, — сказал прохожий, — его маленькие ножки едва поспевают за ослом. Как ты можешь лениво восседать на осле, когда видишь, что мальчишка совсем выбился из сил? Отец принял его слова близко к сердцу. Когда они завернули за угол, он слез с осла и велел сыну сесть на него. Очень скоро повстречался им другой человек и сказал: — Как не стыдно! Малый сидит верхом на ослике, как султан, а его бедный старый отец бежит следом. Мальчик очень огорчился от этих слов и попросил отца сесть на ослика позади него. — Люди добрые, видали вы где-либо подобное? — заголосила женщина под чадрой. — Так мучить животное! У бедного ослика уже провис хребет чуть ли не до земли, а старый и молодой бездельники восседают на нём, будто он диван, о несчастное животное! Не говоря ни слова, отец и сын, посрамлённые, слезли с осла. Едва они сделали несколько шагов, как встретившийся им человек стал насмехаться над ними: — Чего это ваш осёл ничего не делает, не приносит никакой пользы и даже не везёт кого-нибудь из вас на себе? Отец сунул ослику полную пригоршню соломы и положил руку на плечо сына. — Что бы мы ни делали, — сказал он, — обязательно найдётся кто-то, кто с нами будет не согласен. Я думаю, мы сами должны решать, как нам путешествовать. Иной раз полезней, не слушая чужих советов, следовать своим путем по своему плану. Ведь свою жизнь проживаем мы, а не посторонние советчики.
Помните, лучше готовая игра в которой есть куски кода которые на ночь лучше не смотреть 🙂 чем красивые исходники этой неработающей игры
Итого мне кажется в javascript'е нет никакой проблемы в "общем" статичном объекте. На мой взгляд это удобнее чем передавать миллион параметров. Если я не ошибаюсь именно так работает phaser.io .

Комментариев нет:

Отправить комментарий