转自: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(); }
至此结束。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 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的一个常见问题