Creating UI Using Vectorian Giotto and FlashDevelop
转至元数据结尾
转至元数据起始
总览
完成了这个主题后您将能够:
- 使用 "Vectorian Giotto "为您的游戏创建用户界面 (UI)。
- 使用 "FlashDevelop" 可以使 UI 与脚本语言交互。
- 使用 "Flowgraph" 实现 UI。
- 学习使用 UI 模拟器。
下载并安装以下工具:
Vectorian Giotto |
http://vectorian.com/giotto/ |
Notepad++ |
http://notepad-plus-plus.org/ |
FlashDevelop |
http://www.flashdevelop.org/ |
图形 UI 入门知识
安装工具之后开始运行 "Vectorian Giotto"。使用该程序创建 UI 的图形端。
Setting Up the Document
- 进入 文件 > 新影片。
首先进行文档设置。
- 进入 修改 > 文档。
- 输入 "1280" 修改宽度。
- 输入 "720" 修改高度。
- 输入 "30" 修改帧速率。
- 将标尺单位设置为像素。
"Vectorian Giotto" 不会提示您保存工作,因此在关闭之前要确保随时保存。
- 进入 文件 > 保存。
由于 "Vectorian Giotto" 没有工作区或诸如此类的区域,因而您将需要保持其整洁。
- 新建一个“Giotto 工作区”文件夹。
- 在该文件夹中添加另外一个文件夹,命名为“教程项目”。
- 在该文件夹中将您的文件保存为“按钮教程”。
在屏幕的顶端您将发现时间轴。该时间轴将后景和组件智能分开在不同的图层中。
- 双击现有图层,图层 1。
- 使用诸如“后景”或 "BG" 之类的名称重命名该图层。
- 右击该图层,添加新的图层。
- 重命名该图层为“组件”。
创建图形用户界面
创建按钮
- 从右侧的调色板中选择一种颜色,再选择左侧的矩形工具.
- 确保顶部的组件层已选。
- 在画布中画一个将表示按钮的方框。
- 再次选择左侧的文本工具,从右侧选择一种颜色。
- 单击按钮并键入一些文本。
- 单击选择工具 并适当地移动文本。
现在我们将使用文本将图形转换为按钮。
- 右击您刚刚在画布中画的矩形方框,并选择“转换为符号”。
- 指定名称,例如:文本按钮。
- 确保要选择“按钮”,而不是影片剪辑,并单击“确定”。
现在图形已被按钮替换。双击该按钮可将其放大,将更改时间轴并且可以编辑按钮属性。
目前该按钮包括四种状态:悬上、接触、按下和点击。
状态 |
描述 |
---|---|
离开 |
鼠标未在按钮上 |
悬空 |
鼠标在按钮上(未点击) |
按下 |
按钮被按下(按下鼠标按钮) |
击中 |
点击按钮(按下之后释放鼠标按钮) |
- 右击第二个框架(“接触”) > 插入关键帧。
- 按照同样的步骤为其他状态插入关键帧。
现在我们可以改变不同状态下的按钮外观。
- 进入“悬上”状态并移动颜色滑杆,您可以选择颜色只改变光度。按照同样的步骤为“按下”和“点击”状态改变光度。
- 单击“进入影片”以返回您的场景,否则接下来您的操作将是在按钮中完成而不是在场景中完成。
创建消息框
现在将添加一些文本到我们的场景中,稍后我们可以在该场景中实时编辑。
- 选择左侧的文本工具。
- 从右侧中选择一种颜色。确保未选择黑色。由于稍后我们将要使用的 UI 模拟器是黑色后景,因此,为易于测试,可以选择例如红色
- 绘制一个文本字段。
您的场景外观应该是这样。
导出 UI
现在,由于我们想要使用脚本中的按钮和文本字段,我们可以使用适当的名称为其命名。
- 单击按钮并命名。
- 按照同样的步骤为中间的文本框命名。
而且由于我们使用的是字体文件夹,我们需要将其嵌入到 SWF 文件中。请使用“选择工具”来完成此操作,并单击中间的“消息框”。
在属性的底部:
- 设置其类型为动态类型。
- 单击“选择”按钮,此操作将确保文本在运行时不被选取。
- 将按钮对齐方式设置为居中。
- 单击“嵌入...”。
- 选择所有的四行字体并单击“确认”。此操作将确保可以显示包括 SWF 文件在内的字体。
- 再次保存您的文件。
- 进入 文件 > 导出 Flash 影片。
- 并将其导出至同一文件夹。系统将询问您是否压缩影片,不需选中复选框,仅需单击“确认”。
现在您的项目文件夹中应该包含以下文件:
- TutorialButton.vgd
- TutorialButton.swf
目前 SWF 文件中仅包含 UI 的图片部分,在下一部分中您将创建支持该图片的代码。
实现用户界面交互
设置“项目”
打开 FlashDevelop 并进入
- 项目 > 新建项目。
- 在“脚本语言 2”下方选择空项目。.
- 给该项目命名,例如“教程项目”。
- 进入“浏览器”。
- 寻找您的项目文件夹。
- 单击“制作新文件夹”。
- 将其命名为“代码”。
- 单击“确认”。
- 再次单击“确认”以创建项目。
此操作将会把代码放置于 SWF 旁边的文件夹,美观且整齐。
现在在右侧您将看到您已创建的项目(教程项目 (AS2))。
- 右击该项目,并选择 添加 > 新类。
- 将其命名(例如“测试按钮类”)。
- 并单击。
现在已有项目和类,并且我们将使用类经由 Scaleform 使 Flash 与 CryEngine 挂钩。
- 右击该类并选择 总是编译。此操作将确保在项目运行时编译该类。
下面继续项目属性。
- 右击您的项目,进入 属性。
在此处您将看到 5 个标签,我们将仅编辑其中 2 个。
- 首先是“输出” 标签,此标签将暂存所有新导出文件的信息。
- 确保该平台使用的是 Flash 播放器和 8.0 版本。
- 编译目标可以保持在“应用程序”中。
- 单击浏览器并使用 SWF 文件查找文件夹的位置,但要确保以不同的名称命名。例如 "TutorialButtonInjected.swf"。该名称可以显现出 SWF 图形和注入编码后图形的明显区别。
- 设置维度和帧速率的数值与 "Vectorian Giotto" 项目中维度和帧速率的数值相同,分别设置为" 1280 x 720" 和 "30 fps"。
- 进入“注入”标签,此标签暂存用于注入操作脚本代码到 SWF 图形文件的设置。
- 标记“启用代码注入”复选框。
- 在输入 SWF 文件框中,查找我们刚刚使用 "Vectorian Giotto" (TutorialButton.swf) 创建的 UI 文件的位置。
添加操作脚本
现在,项目将准备注入操作脚本到 SWF 文件。
此文件需要如下所示的入口点:
static var ButtonTest:ButtonTestClass;
public static function main(mc:MovieClip):Void
{
ButtonTest = new ButtonTestClass();
}
|
起初执行代码片段,该操作将“测试按钮类”实例化并保存于“测试按钮”中。
这意味着已调用构造函数,我们需要进行实例化的所有类皆可以在此处执行。
构造函数中以下代码将处理按下按钮:
public function ButtonTestClass()
{
_root.ButtonClick.onPress = function()
{
fscommand( "ButtonClickPressed" );
}
}
|
使用我们自己的按钮重写“按下”函数。注意 "_root.ButtonClick"。
这是对象路径,该路径总是以 "_根,开始,然后是按钮名称。
命令使 Flash 对象与其所有者实现沟通,在我们的实例中是实现 CryEngine 与其内部的 Scaleform 沟通。
该命令用于发送事件至可以捕获 Flowgraph 和 流程(稍后将对此流程进行说明)的 CryEngine。
最后,添加可以更改消息框中文本的函数。
public static function ChangeMessage(message:String)
{
_root.MessageLabel.text = message;
}
|
这里再次注意"_root.MessageLabel"。
此处是操作脚本文件的完整代码:
class ButtonTestClass
{
static var ButtonTest:ButtonTestClass;
public static function main(mc:MovieClip):Void
{
ButtonTest = new ButtonTestClass();
}
public function ButtonTestClass()
{
_root.ButtonClick.onPress = function()
{
fscommand( "ButtonClickPressed" );
}
}
public static function ChangeMessage(message:String)
{
_root.MessageLabel.text = message;
}
}
|
导出注入的影片至游戏
- 保存您的文件。
- 项目 > 建立项目。
此操作将注入代码至给定的 SWF 文件,并将其另存至输出文件中。
若您想要运行您的项目,您可以进入
- 项目 > 测试项目
由于点击按钮将仅生成即将处理的事件,因而此时不需多项操作,但您可以查看您的 UI 以及运行时未出现错误的外观。
现在将使 UI 在游戏中运行
- 进入您的项目文件夹。
- 复制 "TutorialButtonInjected.swf" 文件。
- 粘贴至“<您的 CryEngine 文件夹> \游戏\库\UI"。
- 用 ".gfx" 扩展名重命名该文件。
现在为使 CryEngine 能够读取该文件,将需要一个保存在 XML 文件中的 UI 元素。
- 打开记事本++。
- 粘贴文件中的以下代码。
<!-- Category name, of your own choosing -->
<UIElements name= "TutorialHUD" >
<!-- Object name, again, of your own choosing -->
<UIElement name= "TutorialButton" render_lockless= "1" >
<!-- Point it to the correct files and give it some default settings -->
<GFx file= "TutorialButtonInjected.gfx" layer= "0" >
<Constraints>
<Align mode= "dynamic" valign= "center" halign= "center" scale= "0" max= "0" />
</Constraints>
</GFx>
<!-- Map the function to change the message in the box -->
<functions>
<function name= "ChangeMessage" funcname= "ButtonTestClass.ChangeMessage" >
<param name= "message" desc= "" type= "String" />
</function>
</functions>
<!-- Here we will define the event that the buttonClick will generate -->
<events>
<event name= "OnClick" fscommand= "ButtonClickPressed" desc= "" />
</events>
</UIElement>
</UIElements>
?
|
- 按照以下路径保存: "<your CryEngine directory>\Game\Libs\UI\UIElements\TutorialButton.xml"
设置 CryEngine 内部的 UI
测试 UI 模拟器中的 UI
在 UI 模拟器的帮助下,实际上可在将 UI 置于游戏中之前对其进行测试,若要完成此操作,请进入
视图 > 打开试图窗格 > UI 模拟器
注:您在此模拟器中的所有操作都具有临时性,仅供预览而不保存任何设置。
“元素”下方是不同的 UI 列表,您的 UI 应列入其中。
- 单击您的 UI。
- 打开下方的属性。
- 将“可见”属性设置为真。
现在您应该在模拟器窗口中查看您的 UI。
- 打开“标志”。
- 设置“鼠标事件”属性为为真。
现在 UI 将接受鼠标事件并且按钮将对预览中的鼠标做出反应。
您可以测试刚刚设定和添加的函数。
- 打开“函数”。
- 双击“修改消息”。
- 您可以修改“消息”参数并单击调用以查看其是否运行。
旁注:若您的 UI 中未设置后景且文本颜色设置为黑色,由于 UI 模拟器的背景也是黑色,您将无法读取该文本。
因此,为易于测试,明智的做法是添加背景或使用彩色元素。
使用 FlowGraph 以在游戏中显示您的 UI
使用 FlowGraph 显示 UI
最后一步是在您的关卡中实际运行 UI 并使按钮响应点击。
- 进入*文件* > 新建。
- 命名该文件并单击“确认”。
We don't need to bother with adding anything to the level, the water will be fine for now.
- Open the flowgraph editor by clicking the FG button.
or - View > Open view pane > FlowGraph.
- 文件 > *新建 UI 操作*并命名。
- 可选项:您现在可以通过右击实现移动 UI 操作,若想更改文件夹,也可选择更改。
现在显示的是一个空白表格,即您的空 FlowGraph。添加节点以开始、结束程序并对 UI 进行配置。
- 右击并进入*添加节点*、UI、操作*和*开始。
- 右击并进入*添加节点*、UI、操作*和*结束。
- 右击并进入*添加节点*、UI、显示*和*配置。
- 右击并进入*添加节点*、UI、显示*和*约束。
在配置和约束中:
- 双击“元素”。
- 单击 "..."。
- 从列表中选择 UI 元素。
现在将把以下标记设置为真:
在配置中:
- 光标
- 鼠标事件
在约束中:
- 缩放
如下所示,现在链接所有 FlowGraph 节点。
处理事件和函数的 FlowGraph
如前面提到的添加事件和函数至 FlowGraph 。
添加我们定义的事件:
- 右击,添加节点、UI、事件,按钮教程 和 单击。
添加我们所设定的函数:
- 右击,添加节点、UI、函数、按钮教程 和 修改消息。
- 现在仅链接单击“事件”到修改消息“调用”并通过双击来设定消息参数的数值。
- 单击主视窗口。
- 请按 Ctrl+G 键。
现在单击按钮时您的 UI 应该有所响应。由于您的视区设置,其结果可能不尽如人意,在模拟器中您可以低分辨率查看该结果并且可以得到精确的结果。
提示和诀窍
FlashDevelop
- 使用“预构建”和“构建后”命令以加快开发流程。
- 您可以直接设置输出路径到游戏/库/UI 文件夹,扩展名也是 ".gfx"。此操作可以节省开发流程中的另一步骤。
- 若您有意愿,可以用不同的视觉 SWF 编辑器交换 Vectorian Giotto。
Creating UI Using Vectorian Giotto and FlashDevelop相关推荐
- 开源自己用python封装的一个Windows GUI(UI Automation)自动化工具,支持MFC,Windows Forms,WPF,Metro,Qt...
首先,大家可以看下这个链接 Windows GUI自动化测试技术的比较和展望 . 这篇文章介绍了Windows中GUI自动化的三种技术:Windows API, MSAA - Microsoft Ac ...
- qt-designer使用教程3--编写自己的槽
qt-designer使用教程 作者:zieckey(zieckey@yahoo.com.cn) All Rights Reserved! 第三章 编写自己的槽 上一章我们学习了 QT Design ...
- angular 模块构建_如何通过11个简单的步骤从头开始构建Angular 8应用
angular 模块构建 Angular is one of the three most popular frameworks for front-end development, alongsid ...
- android生命周期_Android片段生命周期
android生命周期 Today we will learn about Android Fragment Lifecycle and implement a single activity cla ...
- linux 动画软件,免费开源的 2D 动画软件
春节期间,出于好玩,尝试来做一些自娱自乐的动画:因为预算和配置问题,所以绕开了 Adobe 系列,转而投奔一些免费开源的轻量软件.以下是我的一些发现,拿出来与大家一起分享. 简单轻便,专注逐帧动画,包 ...
- 游戏感虚拟感觉的游戏设计师_从零到游戏设计师:即使您没有任何经验,如何开始制作视频游戏...
游戏感虚拟感觉的游戏设计师 by Angela He 通过何安佳 从零到游戏设计师:即使您没有任何经验,如何开始制作视频游戏 (From Zero to Game Designer: how to s ...
- Linux系统安装网络抓包工具wireshark
既然要安装抓包工具wireshark,那么我们首先必须得了解下它是什么,干什么的? 我只是知识的搬用工:http://baike.baidu.com/link?url=1bxmqMKKN_IItxSc ...
- ux设计师薪水_UX初学者选择亲和力设计师而不是Adobe illustrator的3个节俭原因
ux设计师薪水 This is the modern-day designer's dichotomous dilemma, encapsulating a perennial choice only ...
- swift 听筒模式_Swift中的“工厂方法”模式
swift 听筒模式 定义 (Definition) 'Factory Method' pattern is a creational design pattern that abstracts th ...
最新文章
- python使用statsmodels包中的tsaplots函数和lags参数可视化时间序列数据指定滞后位置个数(级别)以前的所有自相关性(plot the autocorrelation)
- css数字发光,每日CSS_发光文本效果
- web.xml文件头出错
- 【转载】c++之类的基本操作(c++ primer 的读书笔记 ,类对象, 类用户, 类成员的含义)
- debian6 snmpd 安装配置
- linux之chsh命令
- 时间序列分析及应用r语言pdf_R语言时间序列分析(十一):指数平滑法
- 最新 | 机械工程领域SCI期刊一览(2020JCR)
- 水准网测量平差matlab_基于MATLAB的测量平差计算
- myeclipse 百度云
- 做自媒体,宝妈萌娃类视频尤其要注意,越好的视频越有节奏感
- 大白菜U盘重装win7系统教程,PE重装win7系统教程
- 微信小程序的灰度发布
- 什么是IC封测?语音芯片封装与测试的流程步骤
- 网络基础——牛客网刷题第四波
- 每周推荐短视频:为什么理论正确但得不到预期结果?
- word设置多级混合标题
- [PAT A1046]Shortest Distance
- 龙珠头/小怪兽/纸片少女都是怎么弄的?
- OpenWRT AR9331 mjpg-streamer 网络安装和离线ipk安装
热门文章
- UE5 官方案例Lyra全特性详解 6.生成防御塔
- 计算机教案在幻灯片中插入影片,小学六年级上册《在作品中插入“电影”片段》信息技术教案...
- (学习笔记)手把手教你学51单片机:C语言基础以及流水灯的实现
- 施密特(smit)触发器
- 传感器故障下的滑模观测器的设计方法——Utkin观测器和Walcott-Zak 观测器
- 新东方老罗(罗永浩)语录全集
- OpenAI Codex,GitHub Copilot 和cheat.sh 三个代码建议工具对比
- redis 启动命令 (windos)
- 搭建BI平台之前的准备工作
- 在html插入数学公式,如何在Word中插入数学公式