天天看點

scaleform中ActionScript和UnrealScript的互動

scaleform是制作UI的好工具:

  1.他可以解放程式員用代碼控制的UI效果,例如平移,旋轉和縮放都手到擒來。如果要做複雜的動畫頁面,單純的靠代碼來實作非常的麻煩。

  2.他可以結合遊戲引擎使用renderTarget的形式實作立體UI。這一點非常的酷。像老生常談的《死亡空間》和最新的《進階戰争》。

  

  入正題,設定讓ActionScript和UnrealScript實作互動。

Flash:

  1.引入PNG圖檔到庫中。正确的設定其屬性,删除字尾。我們引入一個按鈕圖檔一個滑鼠指針,用來實作滑鼠按鈕點選的功能實作:

  在時間軸上建立5個通道,一個為action,在第一幀上插入AS2腳本代碼。我們設定了三個按鈕,每一個按鈕放在一個單獨的時間軸上,用F8将那幾張圖檔轉換為button。将三個按鈕分别拖拽入場景中,屬性執行個體名分别為btn1,btn2,btn3。然後在action時間軸的第一幀上填寫代碼

import flash.external.ExternalInterface;
import gfx.controls.Button;
import gfx.motion.Tween;

_global.gfxExtensions=true;
import mx.utils.Delegate;

btn1.onPress=function()
{
   ExternalInterface.call('attack');
   trace("attack button pressed");
}

btn2.onPress=function()
{
   ExternalInterface.call('Jump');
   trace("jump button pressed");
}

btn3.onPress=function()
{
    ExternalInterface.call('Defense');
    trace("defense button pressed");
}      

上邊的代碼分别定義了每一個按鈕按下之後所對應的unrealscript函數,例如call('attack')中'attack'。

接下來設定滑鼠指針,點選滑鼠指針,然後F9填寫代碼

onClipEvent(enterFrame)
{
  _x=_root._xmouse
  _y=_root._ymouse
}      

該段代碼可以讓滑鼠出現。

UnrealScript:

  我們打算借用HUD來顯示調用自己的新scaleform頁面,建立一個類AntGFXMenu,該類繼承自GFXMoviePlayer。在HUD中有:

var AntGFXMenu MenuMovie;

//建立
function CreateGFXMenu()
{
    MenuMovie=new class'AntGFXMenu';
    MenuMovie.SetTimingMode(TM_Real);
    MenuMovie.Initialize();  //在AntGFXMenu中自定義的初始化
} 
//銷毀
singular event Destroyed()
{
     super.Destroyed();
     if(MenuMovie!=none)
     {
         MenuMovie.Close(true);
         MenuMovie=none;
     }
}
//在HUD的DrawHUD類中
function DrawHUD()
{
//調用scaleform的重新整理渲染
   MenuMovie.TickHUD();
}      

在AntGFXMovie類中

class AntGFXMenu extends GFXMoviePlayer;

//尋找Flash中定義的變量元件,我們隻實作滑鼠和按鈕
var GFXObject AttackButton,Cursor;

//功能實作
function Initialize()
{
    Start();   //scaleform的初始化函數
    Advance(0.f);

    AttackButton=GetVariableObject("_root.btn1");//Flash中變量名
    Cursor=GetVariableObject("_root.cursor_mc");//擷取滑鼠
}

//實時更新用得着
function TickHUD()
{//實時更新的動作
}

defaultproperties
{
   bDisplayWithHUDoff=false  //是否幹掉HUD
   MovieInfo=swfMovie'Test.MenuTest' //菜單
   bIgnoreMouseInfo=false
}      

以上是一般的通常步驟,下面的代碼用于示範unrealscript調用actionscript的方法;

//在function之前
delegate AttackDelegate();

//實作按鈕的函數定義,AS中ExternalInterface.call('attack');
function SetupAttackDelegate(delegate<AttackDelegate> d)
{
    local GFXObject RootObj;
    RootObj=GetVariableObject("_root"); //我們的action第一幀
    ActionScriptSetFunction(RootObj,"Attack"); //ActionScript中
}

//as調用的函數
function Attack()
{
   AntPlayerController(GetPC()).GiveMoney();
}