智慧 + 毅力 = 无所不能

正确性、健壮性、可靠性、效率、易用性、可读性、可复用性、兼容性、可移植性...
随笔 - 991, 文章 - 0, 评论 - 27, 阅读 - 341万

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

scaleform中ActionScript和UnrealScript的交互

Posted on   Bill Yuan  阅读(638)  评论(0编辑  收藏  举报

转自:http://www.cnblogs.com/NEOCSL/p/4174134.html

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();
}
复制代码

至此结束。

 

(评论功能已被禁用)
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· [AI/GPT/综述] AI Agent的设计模式综述
历史上的今天:
2013-04-24 goroutine的一个常见问题
点击右上角即可分享
微信分享提示