Портирование старых игр Fla sh с использованием Windows форм - Как встроить Fla sh Player dll? - PullRequest
2 голосов
/ 09 апреля 2020

Я разработал несколько довольно популярных игр Fla sh примерно за десятилетие go, и недавно люди просили меня перенести их в Steam. Я изучал, как это сделать, в течение нескольких дней, но мне кажется, что я пытался понять, как заставить картридж GameBoy работать на iPhone, и поиск ответов на вопрос напоминает археологию, поскольку никто не говорит о Fla sh. больше.

Fla sh может быть встроен в exe-проектор с приложением Fla sh Player, но он сохраняет сохраненные данные в виде файлов cookie agile, поэтому мне нужно создать оболочку, которая может обмениваться данными с ним, чтобы сохранить данные более надежно. Мне удалось создать что-то простое в Windows формах (с которыми у меня ограниченный опыт), но есть две возможности, каждая из которых имеет свои проблемы:

Одна из них - это загрузка в проектор win exe. версия файла Fla sh как процесса:

game = Process.Start ( "MARDEK.exe" );
game.WaitForInputIdle ( );
game.EnableRaisingEvents = true;
game.Exited += ( sender, e ) => { Close ( ); };

Это работает и не требует, чтобы у пользователя был установлен Fla sh Player, но я не знаю, может ли он поменяться данные в обоих направлениях с помощью C#.

Другая возможность заключается в непосредственном встраивании SWF:

swf = new AxShockwaveFlashObjects.AxShockwaveFlash ( );
Controls.Add ( swf );
swf.Size = new Size ( 720, 528 );
swf.Location = new Point ( 10, 10 );
swf.BringToFront ( );
swf.LoadMovie ( 0, "MARDEK.swf" );

I думаю, SWF может затем использовать что-то с именем ExternalInterface для связи взад и вперед с C#. Однако огромная проблема заключается в том, что я не думаю, что Fla sh Player поставляется в комплекте, поэтому пользователь должен установить его отдельно. Это неприемлемо.

Я нашел несколько файлов .dll для проигрывателя Fla sh, установленного в моей системе, но я не знаю, возможно ли их объединить и использовать вместо них объекты AxShockwaveFlashObjects из того, что пользователь установил. Вероятно, это была бы идеальная ситуация.

Я знаю, что это неясная проблема - вот почему я должен спросить, потому что Google так мало мне говорит - но любая помощь будет принята с благодарностью!

1 Ответ

3 голосов
/ 10 апреля 2020

Да, я опубликовал игры для AS2 и AS3 Fla sh в Steam. Вот что я могу вспомнить прямо сейчас:

Самый простой способ - создать оболочку Adobe AIR для AS3, которая загружает файл игры swf с помощью SWFLoader (если вы хотите использовать FlashPlayer в AIR, EBF3 использует это) или HTMLLoader (если Вы хотите использовать веб-Flashplayer, EBF5 использует это) и взаимодействует с ним с помощью LocalConnection. Это работает аналогично с AS2 и AS3 swfs. LocalConnection достаточно надежен, если только компьютер пользователя не находится под большим стрессом - тогда соединение может быть закрыто - так что, возможно, стоит периодически проверять / переделывать его.

На самом деле я не уверен, если вам нужен веб-проигрыватель Flash Player или достаточно проигрывателя Flash Player в AIR. В любом случае Flashplayer AIR удаляет параметры качества сцены LOW и MEDIUM, что может быть хорошей причиной для использования веб-интерфейса, если вам нужна эта функция.

В последних версиях AIR не будет включен веб-проигрыватель Flash Player. пакет (ожидая, что пользователь установит его). Вы можете использовать более старую версию AIR (AIR 21 или более раннюю, требующую пиратскую версию Fla sh CC2015), чтобы включить «плененный» Flashplayer, или использовать этот неясный обходной путь в более новых версиях:

  1. Установите NPAPI fla sh player из https://get.adobe.com/flashplayer/npapi/
  2. Загрузите последнюю версию AIRSDK из https://adobe.com/devnet/air/air-sdk-download.html, затем удалите / переименуйте эти файлы: \ runtimes \ air- captive \ win \ Adobe AIR \ Versions \ 1.0 \ Resources \ NPSWF32.dll \ runtimes \ air-captive \ win64 \ Adobe AIR \ Versions \ 1.0 \ Resources \ NPSWF64.dll

и заменить их на : C: \ Windows \ SysWOW64 \ Macromed \ Flash \ NPSWF32_32_0_0_192.dll (вставьте его в указанное место и переименуйте файл в NPSWF32.dll) И: C: \ Windows \ System32 \ Macromed \ Flash \ NPSWF64_32_0_0_192. dll (вставьте его в указанное выше место и переименуйте файл в NPSWF64.dll)

По сути, вы просто изменяете некоторые файлы-заполнители, чтобы обмануть компилятор, включая Flashplayer. Если после изменения файлов вы опубликуете sh свое приложение AIR, пользователю не нужно будет устанавливать Flashplayer.

Вы не сможете понять это самостоятельно. Я получил помощь от программистов Adobe после того, как мои жалобы стали популярными в Твиттере. Это плохо документировано, но когда вы знаете, что делать, это не так много работы.

Это трудная задача.

Вы можете использовать FRESteamWorks () ANE для простой реализации достижений Steam, списков лидеров и других функций. (https://github.com/Ventero/FRESteamWorks) Вам просто нужно включить это в исходные файлы вашей оболочки. Игровой swf должен сообщить обёртке, когда вы хотите разблокировать достижение et c.

Что касается сохранения данных для игр, то ленивым вариантом будет продолжать использовать файлы Fla sh sol. Похоже, что они реже удаляются, если они сделаны настольным приложением. В противном случае вам придется отправлять свои данные через LocalConnection (возможно, из нескольких частей, я думаю, что ограничение составляет 40 КБ за раз) в оболочку, которая затем может создать текстовый файл в любом формате, который вам нравится. Если вы сохраните файлы в папке установки, то облако Steam может автоматически создавать их резервные копии без какого-либо дополнительного кода, необходимого вам.

Еще одна вещь, на которую следует обратить внимание: наложение Steam будет зависать, если ваша SWF-графика не обновляется. Если у вас есть моменты без анимации, вы должны спрятать там анимацию, чтобы наложение продолжало корректно обновляться.

Свяжитесь с нами, если вам нужна дополнительная информация!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...