概述:

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. configure: error: zlib library and headers are required

    configure: error: zlib library and headers are required (1)直接看是zlib没安装导致的,yum list |grep zlib* 看到的是全 ...

  2. mysql基本内容学习过程

    mysql数据库的基本操作: , 数据库的登录:mysql -u 用户名(root) -p密码 -P (端口) -h服务器名(本地表示:127.0.0.1) . 更改数据库显示:mysql -u ro ...

  3. <算法竞赛入门经典> 第8章 贪心+递归+分治总结

    虽然都是算法基础,不过做了之后还是感觉有长进的,前期基础不打好后面学得很艰难的,现在才慢慢明白这个道理. 闲话少说,上VOJ上的专题训练吧:http://acm.hust.edu.cn/vjudge/ ...

  4. UVALive - 3401 Colored Cubes

    好久没写解题回顾了.主要是没什么时间,但是还是一直在刷题,图论刷了70%的知识点,不过感觉长进不是很大,所以觉得还是得一步步来,最近还是先从刘汝佳大白书把前面基础章节刷完然后再决定以后的训练方式吧. ...

  5. SPRING IN ACTION 第4版笔记-第八章Advanced Spring MVC-002-SpringFlow的组件(state\<transition>\<var>\<set>\<evaluate>)

    一. In Spring Web Flow, a flow is defined by three primary elements: states, transitions,and flow dat ...

  6. 146. LRU Cache

    题目: Design and implement a data structure for Least Recently Used (LRU) cache. It should support the ...

  7. Android 发送HTTP GET POST 请求以及通过 MultipartEntityBuilder 上传文件

    折腾了好几天的 HTTP 终于搞定了,经测试正常,不过是初步用例测试用的,因为后面还要修改先把当前版本保存在博客里吧. 其中POST因为涉及多段上传需要导入两个包文件,我用的是最新的 httpmine ...

  8. Android 动态背景的实现以及SurfaceView中添加EditText控件

    首先还是一贯作风,我们先看案例: \ 静态图看不出来效果,如果用过此软件(扎客)的同学们都知道,她的背景会动.怎么样,是不是觉得很时尚,起码比静态的要好(个人观点).其实实现起来并不复杂,这个如果让做 ...

  9. poj2229Sumsets

    http://poj.org/problem?id=2229 挺好的一公式.. #include <iostream> #include<cstdio> #include< ...

  10. Nagios‘process_cgivars()’函数差一错误拒绝服务漏洞

    漏洞名称: Nagios‘process_cgivars()’函数差一错误拒绝服务漏洞 CNNVD编号: CNNVD-201312-495 发布时间: 2013-12-27 更新时间: 2013-12 ...