Недавно мне было поручено перенести существующую игру на базе Flash Player в настольное приложение для публикации на платформе Steam. Платформа Adobe AIR кажется логичным выбором для распространения, особенно с учетом последних обновлений в AIR 3. Учитывая тот факт, что я относительно новичок в разработке flash / flex, я прочитал изрядное количество документации AIR в Adobe сайт, чтобы получить лучшее понимание того, что включает в себя задачу. В целом, я думаю, что у меня есть приличное представление о том, что должно произойти, но есть пара морщин, которые могут повлиять, если / как вообще возможно портировать на среду AIR:
- Приложению AIR потребуется загрузить фактический игровой клиент с внешнего сервера в связи с быстрым временем выполнения разработки клиента.
- Поскольку приложение AIR будет развернуто в Steam, я хочу использовать пакет Captive Runtime, который доступен в AIR 3.0, т. Е. Пользователю не нужно «ОК» для отдельной установки AIR.
- Оказывают минимальное влияние на изменения кода во внешнем SWF, так как я не являюсь основным разработчиком игры.
Моим первым приоритетом является выяснение наилучшего подхода для загрузки SWF-файла внешнего игрового клиента в приложение AIR. Сначала я пытался использовать Loader.load (), но это привело к следующему исключению:
SecurityError: Error #2070: Security sandbox violation: caller http://localhost/MyClient.swf cannot access Stage owned by app:/AS3_AIRTest.swf.
at flash.media::SoundMixer$/set soundTransform()
at com.company.client.sound::SFXManager$/load()
at global/client.util::loadEmbeddedSounds()
at MyClient()
Код ошибки:
static public function load():void {
SoundMixer.soundTransform =
new SoundTransform(Client.Settings.PlaySFX ? 1 : 0);
}
Получив это исключение, я решил немного подробнее прочитать о доменах безопасности проигрывателя AIR / Flash. У меня есть более четкое понимание того, почему возникло исключение, но я все еще не уверен, как лучше всего загрузить SWF-файл и не получить указанное выше исключение.
Изучив многочисленные сообщения на различных форумах, я обнаружил, что ряд разработчиков используют Loader.loadBytes () для переноса SWF в изолированную программную среду приложения. С точки зрения простоты реализации я понимаю, почему многие выбирают этот путь; однако я не склонен придерживаться этого подхода из-за потенциальной опасности для пользовательских систем в случае взлома внешнего сервера.
Второй подход, о котором я читал, состоит в том, что я могу использовать мост сценария песочницы и написать интерфейс для предоставления определенных привилегий внешнему клиентскому SWF. Я не решаюсь идти по этому пути в данный момент, потому что игровой клиент довольно сложный, и я не совсем уверен, сколько ему потребуется доступа к сцене через различные Flash API. Я не списал этот подход, так как он звучит так, как будто это лучшая ставка, но потенциально это может быть большое усилие, и я хочу оказать минимальное влияние на SWF клиента.
Последний подход, о котором я читал, - создание приложения HTML AIR. Насколько я понимаю (отрывочно в лучшем случае), у SWF, загруженного через HTML (я верю в фрейм / фрейм), будет свой этап. Мое мнение заключается в том, что если приложение HTML загружает главную страницу, которая, в свою очередь, имеет iframe со встроенным SWF игрового клиента, клиентский SWF загрузится в удаленную изолированную программную среду безопасности и получит доступ к своей собственной стадии. Я надеюсь, что SWF будет вести себя так же, как во Flash Player.
Это приводит меня к следующим вопросам:
- Правильно ли мое мышление по поводу приложения HTML?
- Будет ли клиент SWF иметь доступ к своей собственной сцене и будет вести себя так же, как в Flash Player?
- Можно ли связывать приложения AIR на основе HTML с незапланированной средой выполнения?
- Могу ли я использовать традиционное Flex-приложение с HTMLLoader для достижения той же цели или это должно быть полноценное HTML-приложение?
- Если можно использовать HTMLLoader, нужно ли указывать метатеги моста сценария песочницы в теге iframe?
Любая помощь будет очень признательна в этот момент. Кажется, что есть несколько доступных вариантов, но я не уверен, какой путь является правильным для выбора в данный момент времени.
Еще раз спасибо.
Джош