Using-scaleform
Использование масштабной формы
Scaleform GFx - это родной графический интерфейс для GTA V, основанный на технологии Flash с использованием ActionScript 2, которая является надмножеством ECMAScript (JavaScript) - подробнее читайте в Википедии.
Среда разработки
Для разработки пользовательских ресурсов .gfx (оптимизированных SWF) необходимо иметь Adobe Flash Pro CS6, использовать ActionScript 2 (версия 3 имеет другую виртуальную машину, которая не поддерживается версией, используемой GFx GTA) и целевой Flash Player 8.0.
Чтобы преобразовать .swf файл, созданный Adobe Flash, в .gfx, вам понадобится инструмент из Scaleform GFx SDK (версия 4.0 подходит).gfxexport.exe
Ограничения
Scaleform не реализует некоторые функции Flash:
- Нет фильтров для фигур. Вообще.
- Нет фильтра размытия для текста. Может быть подделан с помощью светящегося фильтра.
- Никакой маскировки. Будет обсуждаться позже на этой странице.
- Нет встроенной растровой графики. Будет обсуждаться позже на этой странице.
Взаимодействие
Можно взаимодействовать с масштабируемыми формами, выполняя собственные вызовы из пространства имен GRAPHICS с их именем. scaleform
Игра ожидает, что .gfx будет иметь переменную в глобальной области.TIMELINE
Эта переменная служит своего рода публичным API .gfx.
Шаблон
Было бы довольно трудоемко объяснить в деталях, как загрузить вашу первую вещь gfx, поэтому вместо этого, пожалуйста, используйте шаблон:
<li>
<a href="//docs/scripting-manual/using-scaleform/_index.files/boilerplate.zip" >
boilerplate.zip
</a>
(5 kB)
</li>
Погрузка
- Используйте REQUEST_SCALEFORM_MOVIE с именем нужного gfx (без расширения файла), например .
mp_car_stats
- Используйте HAS_SCALEFORM_MOVIE_LOADED в цикле, чтобы предотвратить использование ненагруженного ресурса Scaleform.
Вызов функций в GFx
Обратите внимание, что это низкоуровневый API, среда выполнения C# имеет простую в использовании высокоуровневую абстракцию; и даже если вы не знаете C#, вы можете использовать его в качестве эталонного использования функций, вызывающих собственные компоненты.
> Вызовите BEGIN_SCALEFORM_MOVIE_METHOD для инициализации вызова функции, передайте ему GFx и строку имени функции, которая должна быть членом глобальной переменной TIMELINE в ActionScript.handle
> Определите аргументы, используя одну из следующих функций в зависимости от типа аргумента, который требуется передать:
- SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT
- SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT
- SCALEFORM_MOVIE_METHOD_ADD_PARAM_BOOL
- _PUSH_SCALEFORM_MOVIE_METHOD_PARAMETER_STRING (используется только для коротких строк, таких как имена текстур)
- Пара BEGIN_TEXT_COMMAND_SCALEFORM_STRING, ADD_TEXT_COMPONENT_SUBSTRING_PLAYER_NAME и END_TEXT_COMMAND_SCALEFORM_STRING для обычных строк
> Вызовите END_SCALEFORM_MOVIE_METHOD для завершения вызова функции.
Рисование
Вы можете нарисовать масштабную форму, используя один из этих comamnds, красный, зеленый, синий, альфа- и unk-параметры могут быть опущены, поскольку они ничего не влияют:
- DRAW_SCALEFORM_MOVIE для рисования gfx в 2D на определенном положении
- DRAW_SCALEFORM_MOVIE_FULLSCREEN также рисует gfx в 2D, однако в полноэкранном режиме
- DRAW_SCALEFORM_MOVIE_3D обратите внимание, что если у вас включено затемнение, это будет нарисовано с «соляризированным» и смещено в желтые цвета.
Маскирование
Можно подделать с помощью функции DRAW_SCALEFORM_MOVIE_FULLSCREEN_MASKED, где первый gfx — это то, что вы хотите отобразить, а второй gfx — это маска для него.
Эта маскировка не имеет антиализатора, она не выполняет «гладкую» маскировку, если конкретный пиксель маскировки gfx не является полностью прозрачным, то базовый пиксель будет полностью показан.
Использование текстур
В обычном Flash вы можете просто загрузить изображение в MovieClip (см. класс MovieClipLoader в документах AS2), используя его (http[s]) URL, однако в игре вам нужен протокол.img
Пример правильного url изображения: , где — название словаря текстур и — имя текстуры в указанном TXD.img://mpcarhud/albanympcarhudalbany
Полезные ссылки
Официальная справка по AS2- Справочник AS2
- Дополнительная документация по масштабированию
Дополнительная информация
Некоторые масштабируемые формы также допускают использование определенных элементов HTML, таких как и . Вы также можете установить определенные шрифты для некоторых, используя, например, . Вот список используемых шрифтов (не все работают для каждой масштабной формы):<b><br><FONT FACE='$[fontName]'><FONT FACE='$Font2'>
$Font2
$Font2_cond
$Font2_cond_NOT_GAMERNAME
$Font5
$Machine
$Stencil
$Lubalin
$Bookman
$Stenberg
$Mistral
$HelveticaBLK
$HelveticaBLKI
$Times
$TradeGothic
$AnnaSC
$EngraversOldEnglish
$Bauhaus
$Redemption
Изображение и размер также могут быть установлены, с размером и изображением <FONT SIZE='[fontSize]'><img src='img://txd/tn'>
Пример
Citizen.CreateThread(function()
local ScaleformHandle = RequestScaleformMovie("mp_big_message_freemode") -- The scaleform you want to use
while not HasScaleformMovieLoaded(scaleform) do -- Ensure the scaleform is actually loaded before using
Citizen.Wait(0)
end
BeginScaleformMovieMethod(scaleform, "SHOW_SHARD_WASTED_MP_MESSAGE") -- The function you want to call from the AS file
PushScaleformMovieMethodParameterString("Big Text") -- bigTxt
PushScaleformMovieMethodParameterString("Smaller Text") -- msgText
PushScaleformMovieMethodParameterInt(5) -- colId
EndScaleformMovieMethod() -- Finish off the scaleform, it returns no data, so doesnt need "EndScaleformMovieMethodReturn"
while true do -- Draw the scaleform every frame
Citizen.Wait(0)
DrawScaleformMovieFullscreen(ScaleformHandle, 255, 255, 255, 255) -- Draw the scaleform fullscreen
end
end)