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(); }
至此結束。