概述:

UI即User Interface(用户界面)的简称。UI设计是指对软件的燃机交互、操作逻辑、界面美观的整体设计。好的UI设计不仅可以让游戏变得更有品位,更吸引玩家,还能充分体现开发者对游戏整体的定位和游戏特点。

制作原理:

编译UI基本框架->皮肤制作->引擎事件UI交互

实现方法:

步骤1:

编译UI基本框架。可以参考Genesis-3D入门引擎关于UI教程中的基本UI及运行,参考人们文档基本UI及运行

这里使用Layout editor来完成UI的框架搭建。Widgets->Window创建UI布局的窗口。不同于教程文档中的是,这里建立开发者在设计UI界面初期,建议使用PanelEmpty作为背景,如图7-1-1所示,因为其只起到界面范围约束的作用。


图7-1-1

重新命名,并且将该层设置为底层,如图7-1-2所示。


图7-1-2

根据事先设定的页面排版,添加Button。以制作游戏开始中的开始UI按钮为例。在Layout editor中,设计版式,最终开始界面框中的UI格局图如图7-1-3所示。


图7-1-3

步骤2:

皮肤制作。可以参考Genesis-3D入门引擎关于UI教程中的UI美化,参考入门教程UI中的UI美化。这里使用Skin editor来编辑皮肤。将Skin editor的工程文件直接关联到引擎UI Media文件夹下。File->setting->Folders->Add,来添加文件路径,如图7-1-4所示。


图7-1-4

添加资源文件夹,setting->Resources->Add,路径为UI Media文件夹,如图7-1-5所示。


图7-1-5

重新启动Skin editor后,文件导入做好的UI美术资源图。这时候创建一个皮肤并重新命名:Create->Rename,纹理(Texture)选择导入的图片。在纹理中截取需要使用的皮肤,如图7-1-6所示,同样的方法选择好所有的皮肤后,并将其存储,注意保存文件加".xml"后缀。

步骤3:

打来LayoutEditor,导入Start.layout文件,为其添加皮肤。用记事本打开start.xml,按照左侧SkinEditor中的Coords栏中的数值依次修改皮肤的offset值:

01
< ?xml version="1.0" encoding="UTF-8"?>
02
< MyGUI type="Resource" version="1.1">
03
< Resource type="ResourceSkin" name="UIstart" size="200 200" texture="UI.png">
04
< BasisSkin type="SubSkin" offset="0 0 200 200" align="Stretch">
05
< State name="normal" offset="755 133 200 200"/>
06
< /BasisSkin>
07
< /Resource>
08
< Resource type="ResourceSkin" name="background" size="362 572" texture="UI.png">
09
< BasisSkin type="SubSkin" offset="0 0 362 572" align="Stretch">
10
< State name="normal" offset="304 0 362 572"/>
11
< /BasisSkin>
12
< /Resource>
13
< /MyGUI>
 

创建Init.xml。具体步骤为:新建一个记事本文件,写入代码,保存并关闭后,修改其后缀名为xml。代码如下:

1
< ?xml version="1.0" encoding="UTF-8"?>
2
< MYGUI type="List" >
3
 < list file="start.xml"/>
4
< /MYGUI>

修改gui_core.xml。往里添加一条语句:

01
< ?xml version="1.0" encoding="UTF-8"?>
02
< MyGUI type="List">
03
 < List file="gui_fonts.xml"/>
04
 < List file="MyGUI_Images.xml"/>
05
 < List file="MyGUI_CommonSkins.xml"/>
06
 < List file="MyGUI_BlackOrangeTheme.xml"/>
07
 < List file="MyGUI_Pointers.xml"/>
08
 < List file="MyGUI_Layers.xml"/>
09
 < List file="MyGUI_Settings.xml"/>
10
 < List file="Init.xml"/>
11
< /MyGUI>

在Layout editor中,将文件与引擎UIMedia相关联,方法同Skin editor关联方法相同。最终按钮添加皮肤后的效果如图7-3-1所示。


图7-3-1

步骤4:

在引擎中,为"开始"按钮,编译点击事件,相关代码如下所示。

01
class RestartPanel
02
{
03
  public void Init()
04
 {
05
  //注册开始界面
06
  GUI.RegisterLayout(_windowName, @"Layout\Restart.layout", false, true);
07
  //注册按钮点击事件
08
  GUI.UIWidget.SetEventMouseButtonClick(_windowName, "RestartButton", OnRestartBtnClick, EventControl.Add);
09 10
  //自适应屏幕分辨率
11
  IntSize screenSize = GUI.GetScreenSize();
12
  IntPoint UIpos = new IntPoint((int)(screenSize.width * 0.5f - GUI.UIWidget.GetSize(_windowName, "_Main").width * 0.5f),(int)(screenSize.height * 0.5f - GUI.UIWidget.GetSize(_windowName, "_Main").height * 0.5f));
13
GUI.UIWidget.SetPosition(_windowName, "_Main", UIpos);
14 15
  GUI.SetLayoutVisible(_windowName, true);
16
 }
17 18
 public void SetVisible(bool vis)
19
 {
20
  GUI.SetLayoutVisible(_windowName, vis);
21
 }
22
 private void OnRestartBtnClick(FString sender)
23
 {
24
  //控制游戏暂停与开始逻辑
25
  bool pause = Logic.LogicMgr.Instance.IsPause;
26
  Logic.LogicMgr.Instance.SetPause(!pause);
27
  GUI.SetLayoutVisible(_windowName, false);
28
 }
29 30
 FString _windowName = "RestartPanel";
31
 bool _isPlaying = true;
32
}

引擎官方网站:http://www.genesis-3d.com.cn/

官方论坛:http://bbs.9tech.cn/genesis-3d/

官方千人大群:59113309   135439306

YY频道-游戏开发大讲堂(完全免费,定期开课):51735288

Genesis-3D开源游戏引擎:游戏起源,皆因有我!!!

《Genesis-3D开源游戏引擎--横版格斗游戏制作教程07:UI》的更多相关文章

  1. 简单物联网:外网访问内网路由器下树莓派Flask服务器

    最近做一个小东西,大概过程就是想在教室,宿舍控制实验室的一些设备. 已经在树莓上搭了一个轻量的flask服务器,在实验室的路由器下,任何设备都是可以访问的:但是有一些限制条件,比如我想在宿舍控制我种花 ...

  2. 利用ssh反向代理以及autossh实现从外网连接内网服务器

    前言 最近遇到这样一个问题,我在实验室架设了一台服务器,给师弟或者小伙伴练习Linux用,然后平时在实验室这边直接连接是没有问题的,都是内网嘛.但是回到宿舍问题出来了,使用校园网的童鞋还是能连接上,使 ...

  3. 外网访问内网Docker容器

    外网访问内网Docker容器 本地安装了Docker容器,只能在局域网内访问,怎样从外网也能访问本地Docker容器? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Docker容器 ...

  4. 外网访问内网SpringBoot

    外网访问内网SpringBoot 本地安装了SpringBoot,只能在局域网内访问,怎样从外网也能访问本地SpringBoot? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装Java 1 ...

  5. 外网访问内网Elasticsearch WEB

    外网访问内网Elasticsearch WEB 本地安装了Elasticsearch,只能在局域网内访问其WEB,怎样从外网也能访问本地Elasticsearch? 本文将介绍具体的实现步骤. 1. ...

  6. 怎样从外网访问内网Rails

    外网访问内网Rails 本地安装了Rails,只能在局域网内访问,怎样从外网也能访问本地Rails? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Rails 默认安装的Rails端口 ...

  7. 怎样从外网访问内网Memcached数据库

    外网访问内网Memcached数据库 本地安装了Memcached数据库,只能在局域网内访问,怎样从外网也能访问本地Memcached数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装 ...

  8. 怎样从外网访问内网CouchDB数据库

    外网访问内网CouchDB数据库 本地安装了CouchDB数据库,只能在局域网内访问,怎样从外网也能访问本地CouchDB数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Cou ...

  9. 怎样从外网访问内网DB2数据库

    外网访问内网DB2数据库 本地安装了DB2数据库,只能在局域网内访问,怎样从外网也能访问本地DB2数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动DB2数据库 默认安装的DB2 ...

  10. 怎样从外网访问内网OpenLDAP数据库

    外网访问内网OpenLDAP数据库 本地安装了OpenLDAP数据库,只能在局域网内访问,怎样从外网也能访问本地OpenLDAP数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动 ...

随机推荐

  1. R中逻辑运算

    一.是否相等的判断的方法 (1)判断字符串是否相等is.null(x) (2)判断x的每个元素是否在y中出现: x %in% y (3)判断判断每个相对应的元素是否相等: x == y (4)判断近似 ...

  2. python中functools.wraps装饰器的作用

    functools.wraps装饰器用于显示被包裹的函数的名称 import functools def node(func): #@functools.wraps(func) def wrapped ...

  3. 用shell查找某个目录下最大文件

    网上资料学习: 1.查找当前目录下最大文件(包括子目录里文件): find . -type f -exec stat -c "%s %n" {} \; | sort -nr | h ...

  4. javaWeb中的/路径问题

    在写javaweb的时候,在写路径的时候,/有时候表示站点根目录,有时候表示当前web应用根目录,究竟如何区分呢? 首先,我们建议开发的时候,跳转之类的都是用绝对路径(注意:不是物理路径),而不是使用 ...

  5. Convert.ToString和ToString的区别

    Convert.ToString能处理字符串为null的情况,不抛出异常. ToString方法不能处理字符串为null的情况,会抛出异常.如:“未将对象引用设置到对象的实例”.

  6. appcache checking update

    <!DOCTYPE html> <html manifest="a.appcache"> <head> <title></ti ...

  7. JavaScript跨站脚本攻击

    跨站脚本攻击(Cross-Site Scrpting)简称为XSS,指的是向其他域中的页面的DOM注入一段脚本,该域对其他用户可见.恶意用户可能会试图利用这一弱点记录用户的击键或操作行为,以窃取用户的 ...

  8. hadoop-streaming 配置之---参数分割

    map: -D stream.map.output.field.separator=. 定义mapoutput字段的分隔符为. 用户可以自定义分隔符(除了默认的tab) -D stream.num.m ...

  9. C# winform 弹出输入框

    Microsoft.VisualBasic.dll   引用using Microsoft.VisualBasic; string PM = Interaction.InputBox("提示 ...

  10. 小米1S MIUI V5刷回V4教程

    V5确实很漂亮,但是1S只有1G的手机内存,确切说是760M左右的内存,所以运行V5卡的不行.解决小米手机刷回V4卡死在开机MI界面!! 于是,我想回到V4,虽然界面没有V5华丽,菜单没有V5扁平化, ...