Using-scaleform

From FiveM Wikipedia

Использование масштабной формы

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>		
	

Погрузка

  1. Используйте REQUEST_SCALEFORM_MOVIE с именем нужного gfx (без расширения файла), например .mp_car_stats
  2. Используйте HAS_SCALEFORM_MOVIE_LOADED в цикле, чтобы предотвратить использование ненагруженного ресурса Scaleform.

Вызов функций в GFx

Обратите внимание, что это низкоуровневый API, среда выполнения C# имеет простую в использовании высокоуровневую абстракцию; и даже если вы не знаете C#, вы можете использовать его в качестве эталонного использования функций, вызывающих собственные компоненты.

> Вызовите BEGIN_SCALEFORM_MOVIE_METHOD для инициализации вызова функции, передайте ему GFx и строку имени функции, которая должна быть членом глобальной переменной TIMELINE в ActionScript.handle

> Определите аргументы, используя одну из следующих функций в зависимости от типа аргумента, который требуется передать:

> Вызовите 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

Полезные ссылки

Дополнительная информация

Некоторые масштабируемые формы также допускают использование определенных элементов 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)


Руководства по написанию сценариев