scaleform中ActionScript和UnrealScript的交互

  scaleform是製做UI的好工具:程序員

  1.他能夠解放程序員用代碼控制的UI效果,例如平移,旋轉和縮放都手到擒來。若是要作複雜的動畫頁面,單純的靠代碼來實現很是的麻煩。函數

  2.他能夠結合遊戲引擎使用renderTarget的形式實現立體UI。這一點很是的酷。像老生常談的《死亡空間》和最新的《高級戰爭》。工具

  

  入正題,設置讓ActionScript和UnrealScript實現交互。動畫

Flash:spa

  1.引入PNG圖片到庫中。正確的設置其屬性,刪除後綴。咱們引入一個按鈕圖片一個鼠標指針,用來實現鼠標按鈕點擊的功能實現:指針

  在時間軸上創建5個通道,一個爲action,在第一幀上插入AS2腳本代碼。咱們設置了三個按鈕,每個按鈕放在一個單獨的時間軸上,用F8將那幾張圖片轉換爲button。將三個按鈕分別拖拽入場景中,屬性實例名分別爲btn1,btn2,btn3。而後在action時間軸的第一幀上填寫代碼code

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'。orm

  接下來設置鼠標指針,點擊鼠標指針,而後F9填寫代碼blog

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();
}

至此結束。

相關文章
相關標籤/搜索