概述:

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. 在Intellij IDEA或者PhpStorm下用X-debug调试PHP

    用Intellij IDEA或者PhpStorm使用X-debug来调试PHP,主要需要配置的部分有三个地方,分别为php.ini的配置,IDEA的配置和浏览器的配置,主要如下,以备忘: php.in ...

  2. rman全备份异机恢复

    一.测试环境 [oracle@localhost ~]$ uname -a Linux localhost.localdomain -.el6.x86_64 # SMP Tue May :: EDT ...

  3. windows8.1专业中文版一个可用的密钥分享

    分享一个windows8.1专业中文版一个可用的密钥,亲测可用,联网输入密钥激活即可. PKHMN-TWQ6R-XDTH7-P4WW4-YR9T7

  4. bat写的自动部署脚本

    windows7的机器上重启服务需要关闭UAC ::编译部署项目 echo off echo 1. GatewayAdaptor echo 2. LogicService echo 3. Messag ...

  5. python 读写文本文件

    本人最近新学python ,用到文本文件的读取,经过一番研究,从网上查找资料,经过测试,总结了一下读取文本文件的方法. 1.在读取文本文件的时无非有两种方法: a.f=open('filename', ...

  6. 找工作ing

    找工作已经一个月多了,这一个月跑来跑去,挺累的,倒也不是身体有多累,关键是心累!作为一名控制工程专业的研究生,想找一份软件开发类的工作,没想到这么难!在起初的时候,觉得自己C++和JAVA都会,找哪个 ...

  7. JavaScript函数调用

    1. 调用一个函数将暂停当前函数的执行,传递控制权和参数给新函数. 2. 除了声明时定义的形参,每个函数都有两个附加的参数:this和arguments. 1. this在面向对象编程中很重要,它的值 ...

  8. 在JSP中使用BootStrap

    1. 下载BootStrap,然后再Jsp标签中添加如下标签: <html> <head lang="zh-cn"> <meta charset=&q ...

  9. BT5之网络配置

    输入ifconfig命令,可以查看当前IP地址设置情况.查看路由表的命令(用来检查默认网关是否设置正确):netstat -r 一.让BT5自动获取IP地址 自动获取IP地址,使用dhclient命令 ...

  10. SpringMVC可以配置多个拦截后缀*.html和.do等

    一个servlet可以配置多个servlet-mapping, 因此在xml文件中我们可以这样配置: <!-- springmvc配置 --> <servlet> <se ...