zoukankan      html  css  js  c++  java
  • 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();
    }

    至此结束。

  • 相关阅读:
    hdu 4297 One and One Story 夜
    hdu 4280 Island Transport 夜
    1389. Roadworks 夜
    hdu 4289 Control 夜
    hdu 4291 A Short problem 夜
    hdu 4284 Travel 夜
    1080. Map Coloring 夜
    正则中的转义符\
    起重复出现作用的量词*和+
    安卓的权限大全和动态使用安卓权限
  • 原文地址:https://www.cnblogs.com/NEOCSL/p/4174134.html
Copyright © 2011-2022 走看看