Scaleform GFx и CryENGINE
Материал из CryWiki Russia
DCamer (Обсуждение | вклад) (Новая страница: «'''Scaleform GFx''' — внешнее подпрограммное обеспечение позволяющее отображать Flash-элементы на ...») |
DCamer (Обсуждение | вклад) |
||
Строка 60: | Строка 60: | ||
Для иного его использования, необходимо реализовать '''ScriptBind''' для (например) класса '''HUD Manager''' для того, чтобы Lua мог взаимодействовать с С++ (взгляните на файлы '''ScriptBind_Game.h''' и '''ScriptBind_Game.cpp'''). В пределах этих методов '''ScriptBind''', вы можете просто вызвать метод Flash через указатель '''IFlashPlayer''': | Для иного его использования, необходимо реализовать '''ScriptBind''' для (например) класса '''HUD Manager''' для того, чтобы Lua мог взаимодействовать с С++ (взгляните на файлы '''ScriptBind_Game.h''' и '''ScriptBind_Game.cpp'''). В пределах этих методов '''ScriptBind''', вы можете просто вызвать метод Flash через указатель '''IFlashPlayer''': | ||
<source lang="cpp">pFlashPlayer->Invoke0("flashMethod"); // 0 аргументов</source> | <source lang="cpp">pFlashPlayer->Invoke0("flashMethod"); // 0 аргументов</source> | ||
+ | |||
+ | [[Категория:CryEngine 3 Free SDK:Пользовательский интерфейс]] |
Текущая версия на 12:32, 26 февраля 2012
Scaleform GFx — внешнее подпрограммное обеспечение позволяющее отображать Flash-элементы на экране (UI, HUD, текстуры в формате Flash, и т. д.).
Flash-файлы должны быть обработаны GFxExporter, прежде чем их использовать в движке. Файлы Scaleform GFx используют в своём название расширение gfx. Далее представлен короткие пример отрисовки основного Flash-элменета в качестве HUD:
Откройте Game.h, найдите m_pBitmapUi и добавьте:
#include "IFlashPlayer.h" ... IFlashPlayer* m_pFlashPlayer;
IFlashPlayer — интерфейс, дающий вам все возможности контролировать проигрыватель Flash в игровом окне проекции.
Откройте Game.cpp. Добавьте в конструктор инициализацию указателя проигрывателя Flash.
m_pFlashPlayer(NULL)
В функции Init создайте экземпляр проигрывателя Flash из системы.
if(!m_pFlashPlayer) { m_pFlashPlayer = gEnv->pSystem->CreateFlashPlayerInstance(); bool bRes = m_pFlashPlayer->Load("Libs\\UI\\Menus_FindGame.swf"); CryLogAlways("Loading Libs\\UI\\Menus_FindGame.swf: %s",(bRes)?"Done":"Error"); m_pFlashPlayer->SetViewport(0,0,m_pFlashPlayer->GetWidth(), m_pFlashPlayer->GetHeight(), 1); }
Экземпляр проигрывателя Flash создал CrySystem. Вы можете получить доступ к CrySystem через глобальную переменную gEnv.
Вы можете отобразить Flash-файл в функции PostUpdate.
if(m_pFlashPlayer != NULL) { m_pFlashPlayer->Advance(fDeltaTime); m_pFlashPlayer->Render(); }
Advance синхронизирует игру с Flash-файлами. С помощью Advance вы можете отображать анимированные Flash-файлы.
Доступны различные консольные команды, позволяющие контролировать среду Flash:
- sys_flash
- Включает/отключает отображение Flash.
- sys_flash_info
- Включает профилирование Flash, и отображение различной информации.
- sys_flash_log_options
- Включает отслеживание некоторых, связанных с Flash, аспектов (загрузка Flash, выполнение ActionScript, и т. д.).
Вызов ActionScript в Lua
Вызов в ActionScript:
fscommand("MyCommand")
Может быть перехвачен в C++ с помощью FSCommandHandler (интерфейс IFSCommandHandler). Таким образом, если у вас есть свой собственный класс (например, HUD Manager), который загружает Flash-файлы, то вы должны его зарегистрировать как FSCommandHandler для Flash-команд через указатель IFlashPlayer:
pFlashPlayer->SetFSCommandHandler(this);
(конечно, вы можете использовать более чем один перехватчик команд, к примеру, один для меню и один для HUD)
После этого, вы сможете вызывать все ваши команды из Flash через метод вашего класса, основанного на интерфейсе IFSCommandHandler:
void MyHUDManager::HandleFSCommand( const char *szCommand,const char *strArgs, void* pUserData ) { if(!strcmp(szCommand, "MyCommand")) { CryLogAlways("Flash command received..."); } }
Если вы получили Flash-команды, все, что вам нужно сделать, это вызвать метод из Lua-скрипта (взгляните на файл ScriptHelpers.h или же напрямую используйте сам ScriptSystem (gEnv->pScriptSystem
)).
Для иного его использования, необходимо реализовать ScriptBind для (например) класса HUD Manager для того, чтобы Lua мог взаимодействовать с С++ (взгляните на файлы ScriptBind_Game.h и ScriptBind_Game.cpp). В пределах этих методов ScriptBind, вы можете просто вызвать метод Flash через указатель IFlashPlayer:
pFlashPlayer->Invoke0("flashMethod"); // 0 аргументов