Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Архитектура игры на AIR. (http://www.flasher.ru/forum/showthread.php?t=211538)

Bletraut 17.09.2015 17:26

Архитектура игры на AIR.
 
Собственно я делаю игру на AIR для гринлайта. У меня очень много 3д моделей, всяких текстур и прочего. Проект создаю в фд. Так вот, как лучше всего мне подключать игровые ресурсы, просто эмбеддить их или как вообще?

Zebestov 17.09.2015 17:28

Только не Embed. Так не делают.
Все нужно загружать/выгружать по месту.

Bletraut 17.09.2015 17:51

Т.е. через лоадеры? Но тогда же ресурсы игры могут изменить. И как её устанавливать будут? Как там всё запаковать тогда?

illuzor 17.09.2015 17:58

Цитата:

Все нужно загружать/выгружать по месту.
Для пк не критично, памяти много.

Zebestov 17.09.2015 18:15

Цитата:

Сообщение от illuzor (Сообщение 1186888)
Для пк не критично, памяти много.

Тогда почему чуть не в каждой игре мы видим "LOADING…" после каждого чиха?

Цитата:

Сообщение от Bletraut (Сообщение 1186887)
Т.е. через лоадеры? Но тогда же ресурсы игры могут изменить. И как её устанавливать будут? Как там всё запаковать тогда?

В конечном счете да, через Loader. Можно пользоваться уже готовыми и удобными Asset Manager-ами. Ресурсы можно зашифровать чем-то быстреньким, вроде XOR-а того же. Устанавливается все из файла .air, который содержит все ресурсы приложения в виде файлов и папок, которые после установки будут находиться в папке File.applicationDirectory.

Bletraut 17.09.2015 18:23

Цитата:

Тогда почему чуть не в каждой игре мы видим "LOADING…" после каждого чиха?
У меня в игре много 3д моделей. И вот перед каждым уровнем у меня парсится 3д модель уровня, а это какое-то время. Думаю там так же, либо какая-то генерация идет.

Zebestov 17.09.2015 18:26

Може и так, не спорю. На мобилах (моя привычная платформа) это роскошь, поэтому вариант "грузануть/заэмбеддить все сразу" — это не вариант вообще =)

Bletraut 17.09.2015 18:54

Цитата:

Може и так, не спорю. На мобилах (моя привычная платформа) это роскошь, поэтому вариант "грузануть/заэмбеддить все сразу" — это не вариант вообще =)
У меня ПК, поэтому я жирую. А вот можно сразу ByteArray лоадером загрузить, а затем этот byteArray в Vector.<Number> перегнать, это же быстрее, чем парсинг модели?

Добавлено через 37 секунд
Вообще я раньше играл в игру "Машинариум" и вот там куча каких-то левых ресурсов была. Вот как они хранились.

Zebestov 17.09.2015 19:00

Очевидно FileStream придется кстати.

AlexCooper 17.09.2015 19:27

Цитата:

Сообщение от Bletraut (Сообщение 1186898)
затем этот byteArray в Vector.<Number> перегнать

Простите что? Расскажите, быть может я отстал от жизни.

По поводу ресурсов, конечно же хранить локально и грузить в рантайме. Как минимум вы сможете реализовать полноценный клиент с автообновлением. Конечное решение зависит от разработчика, кто упаковывает графику в zip + LayoutManager. Кто просто в корне приложения. Лично я, если ресурсы большие, то упаковываю и передаю архивами. Само же приложение при обновлении/первом запуске разпаковывает ресурсы из архива + отдельный файл-конфиг с меткой версии ресурсов и удаляет архив. Приложение так же не грузит все ресурсы, а только лишь те которые нужны

Bletraut 17.09.2015 19:53

Цитата:

Простите что? Расскажите, быть может я отстал от жизни.
Например, у битмапдаты есть метод
Код AS3:

copyPixelsToByteArray

. Я почему-то подумал, что можно сразу byteArray в вектор загрузить.

AlexCooper 17.09.2015 20:03

Цитата:

Сообщение от Bletraut (Сообщение 1186913)
Например, у битмапдаты есть метод
Код AS3:

copyPixelsToByteArray

. Я почему-то подумал, что можно сразу byteArray в вектор загрузить.

Это можно, но логичнее будет в Vector.<uint>. Только вот не понятно что это даст, потому и спрашиваю, чтобы понять, что это и для чего.

Zebestov 17.09.2015 20:04

Перебрасывать в вектор придется по одному числу в цикле… или я чего-то не знаю?

Bletraut 17.09.2015 20:23

Код AS3:

Это можно, но логичнее будет в Vector.<uint>. Только вот не понятно что это даст, потому и спрашиваю, чтобы понять, что это и для чего.

Парсится 3д модель. В Stage3D создаются буфферы из Vector.<Number> для Vertex и UV буффера, Vector.<uint> для Index буффера. Чем мне это парсить из формата, я уж лучше готовый byteArray сохраню, а точнее конкретный vertexBuffer и потом же его загружу.

Хотя может моя "гениальная идея" верх тупости.

Добавлено через 1 час 3 минуты
Хотя я не думаю, что создание vertexBuffer из Vector.<Number> это такое уж долгое занятие. Поэтому я хочу просто загрузить лоадером ByteArray, затем загрузить его в Vector.<Number>, а уже из него создать буффер. Я думаю это гораздо быстрее, чем парсинг модели. Тем более стоит учесть, что загрузка одного уровня занимает около 6-10 сек.

Добавлено через 1 час 5 минут
Хотя вначале я хотел ембеддить ресурсы, т.к. доступ к ним быстрее, чем загрузка лоадером. Но уверен есть свои минусы.

Zebestov 17.09.2015 21:37

Внедрение ресурсов займет столько же времени на загрузку, сколько и чтение из файла. Разница лишь в том, где пользователь будет ждать — на старте приложения или где-то посреди игры. И там и там придется повесить прелоадер и ждать.

Bletraut 17.09.2015 21:51

Это да. Но разве их не смогут модифицировать

Zebestov 17.09.2015 22:19

Ну а какие проблемы вызывает вычисление MD5 от загруженного ByteArray и сравнение с тем, что ты захардкодил внутри? Совпадает — хорошо. Не совпадает — кто-то лазил.


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

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