Html5 Egret游戏开发 成语大挑战(八)一般性二级页面处理
在游戏中,我们一般会有各种各样的二级页面,比如游戏暂停界面或者游戏结束界面,这些界面组成了对玩家交互主要手段,在游戏开发中,对于这些界面的coding组织是非常有学问的,如果倒退到十年前,游戏开发的老前辈们一定孜孜不倦的上课如何设计好“易读”“可维护”“逻辑清晰”的界面代码,本人曾深陷其中变得对代码抠抠索索,结果事倍功半,原因是什么?老前辈们的一个项目或一段代码可能是长期维护长期使用的,而现在的高速code和超短的产品生命周期,使得完全不用规划那么好的交互代码,有时候可能过几个月自己的代码都不认得了,怎么可能给别人去看明白。前面讲那么多,目的是说,这篇实现方式暴力简单,只想快速完成不要搞那么复杂的组件设计,UI规划,现在讲究的是速度,可能你会觉得和第9篇有点冲突,其实不然,等下篇出了我再告诉你为啥。
现在打开春节前的项目吧,说实话,我也有点陌生了,这次只是现实一个gamewin的界面,直接在游戏场景中实现胜利界面,在Wing先打开SceneGameSkin.exml文件,此时“可能”会出现界面不显示,在输出栏里是这样的:

对于这个情况,不知道为什么,似乎是自定义控件造成的类解析错误,解决它很简单,点击上面的刷新按钮:

一下就好了,现在找到组件拖进去一个Group来当Win界面的父容器。

然后,在设计界面里设计好胜利的UI界面,在这里直接将最终做好的结果给大家看吧:

首先,有一个正解图片底板,还有两个Label来显示解释和出处,还有一个按钮下一题,奖励的UI是原版有的,由于我们不实现奖励,所以,有兴趣的可以自己实现,界面的底层,加了一个半透明的eui.Rect来解决遮挡,让UI看起来更加立体,下面是增加到scenegame.exml里面的描述:
<e:Group id="group_win" left="0" top="0" bottom="0" right="0" visible="false">
<e:Rect left="0" top="0" bottom="0" right="0" fillAlpha="0.53"/>
<e:Image source="Result_png" horizontalCenter="0" verticalCenter="260"/>
<e:Button id="btn_next" x="432" y="941">
<e:skinName>
<e:Skin states="up,down,disabled">
<e:Image width="100%" height="100%" source="ResultBtn_png" source.down="ResultBtn1_png"/>
<e:Label id="labelDisplay" horizontalCenter="0" verticalCenter="0"/>
</e:Skin>
</e:skinName>
</e:Button>
<e:Label id="lb_from" text="标签" x="113" y="700" textColor="0x000000" multiline="true" width="501" height="65"/>
<e:Label id="lb_explain" multiline="true" textColor="0x000000" text="标签" height="127" y="805" width="501" x="113"/>
</e:Group>
下面是实现界面的代码控制,打开SceneGame.ts文件,增加成员变量,和exml设计对应:
private group_win:eui.Group;//胜利界面的group控件
private btn_next:eui.Button;//下一个题目
private lb_explain:eui.Label;//解释
private lb_from:eui.Label;//来源
实现两个方法,一个是用来跳转到下一个题目的,一个是显示结果的:
private onclick_next(){
//下一个题目
this.group_win.visible = false;
SceneLevels.Shared().OpenLevel(this.levelIndex + 1);
this.InitLevel(this.levelIndex + 1);
}
private showWin(){
this.group_win.visible = true;
var leveldata = LevelDataManager.Shared().GetLevel(this.levelIndex);
this.lb_from.text = leveldata.tip;
this.lb_explain.text = leveldata.content;
}
在构造函数中增加下一个题目的事件注册:
this.btn_next.addEventListener(egret.TouchEvent.TOUCH_TAP,this.onclick_next,this);
在onclick_word方法里替换之前的“console.log("win");”
this.showWin();
因为之前预留好了接口,只需要把逻辑实现即可,当游戏胜利的时候将group_win组件visible为true,并将Label赋值,当点击下一题时,隐藏group_win并将题目刷新,同时将关卡地图也刷新推进一个关卡。
最重显示效果如下:

好了,本篇就已经结束,现在一个几乎完整的游戏已经差不多,只需要活用visible就可以在一个UI下组织出所有的操作,在这里没有说到使用“状态”,状态可以更加方便的设计UI操作,但本游戏界面简单,就不做详细的讲解。
本篇项目源码:ChengyuTiaozhan5.zip(由于博客园的文件大小限制,resource资源方面请到第二篇的后面下载)
Html5 Egret游戏开发 成语大挑战(八)一般性二级页面处理的更多相关文章
- Html5 Egret游戏开发 成语大挑战(一)开篇
最近接触了Egret白鹭引擎,感觉非常好用,提供了各种各样的开发工具让开发者和设计者更加便捷,并且基于typescript语言开发省去了很多学习成本,对于我们这种掉微软坑许久的童鞋来说,确实很有吸引力 ...
- Html5 Egret游戏开发 成语大挑战(二)干净的eui项目和资源准备
现在我们使用egret来起步开发一个名叫<成语大挑战>的小游戏,关于egret的开发环境就不在这里啰嗦了,直接去官方下载安装就可,egret是我见过开发环境部署最简单的解决方案,这个系列教 ...
- Html5 Egret游戏开发 成语大挑战(九)设置界面和声音管理
在上一篇中,简单的使用界面元素快速实现了一个游戏中的二级页面,这种直接在游戏页面上做UI的做法并不太好,原因是,UI会让游戏的压力变大,即使它是隐蔽的,如果同样的功能在其它的地方也是一样的,那么就要写 ...
- Html5 Egret游戏开发 成语大挑战(七)游戏逻辑和数据处理
本篇在前面的基础上,将进行逻辑的编码开发让游戏能够正式的玩起来,这里没有注重太多的体验细节,而是直接实现游戏的规则逻辑,将分成两个部分说明:数据处理和游戏逻辑. 初始化游戏数据 在前面的第五篇中,我们 ...
- Html5 Egret游戏开发 成语大挑战(六)游戏界面构建和设计
本篇将主要讲解游戏界面的构建和设计,会应用到egret.eui的自定义组件,可以很直观的构建一个游戏整体,这里我们仍然只需要使用EgretWing就可以达到目的,本篇可能是篇幅最少的一个,但是涉及自定 ...
- Html5 Egret游戏开发 成语大挑战(四)选关界面
通过前面的开始界面基本上了解了eui的使用方法,可以简单快速的制作一个UI界面,本篇使用第二界面选关界面展示更为难一点的代码控制,来展现关卡地图的内容,请确保素材和资源完整,可以在前面的教程中找到下载 ...
- Html5 Egret游戏开发 成语大挑战(三)开始界面
本篇需要在前面的素材准备完毕,才可以开始,使用egret的eui结合代码编辑,快速完成基本的界面搭建,这里写的可能比较细,目的是减少大家对于其中一些操作疑问,我去掉了很多无用的步骤,以最精简的流程来完 ...
- Html5 Egret游戏开发 成语大挑战(五)界面切换和数据处理
经过前面的制作,使用Egret的Wing很快完成了开始界面和选关卡界面,下面通常来说就是游戏界面,但此时界面切换和关卡数据还没有准备好,这次讲解界面的切换和关卡数据的解析.前面多次修改了Main.ts ...
- Phaser是一款专门用于桌面及移动HTML5 2D游戏开发的开源免费框架
Phaser是一款专门用于桌面及移动HTML5 2D游戏开发的开源免费框架,提供JavaScript和TypeScript双重支持,内置游戏对象的物理属性,采用Pixi.js引擎以加快Canvas和W ...
随机推荐
- XML解析之DOM详解及与SAX解析方法的比较
XML解析(DOM) XML文件解析方法介绍 我们所用到的NSXMLParser是采用SAX方法解析 SAX(Simple API for XML) 只能读,不能修改,只能顺序访问,适合解析大型XML ...
- OC中runtime的使用
一.runtime简介* RunTime简称运行时.OC就是“运行时机制”,也就是在运行时候的一些机制,其中最主要的是消息机制.* 对于C语言,“函数的调用在编译的时候会决定调用哪个函数”.* 对于O ...
- flashdevelop生成swc库
flashdevelop没有直接支持生成swc的工程,但flashdevelop生成swc也比较方便,不用任何插件. swc库是由 flexsdk的compc.exe生成的,其实我们通过这个命令行也可 ...
- 自定义可视化调试工具(Microsoft.VisualStudio.DebuggerVisualizers)vs.net开发工具
背景: 话说:使用CYQ.Data时,会经常断点MDataTable的对象,为了查看表格的数据内容,在监视里会常ToDataTable(),然后借可DataTable的可视化方式查看表格. 近日:心中 ...
- 坑!坑!坑!防不胜防的unsigned int的运算
我很早之前就知道,unsigned int与int运算的时候,int会被转化为unsigned int来进行运算.一直觉得定这条规则的人是极度反人类的,虽说unsigned int可以表示更大的正值, ...
- VBS进行http请求及JSON数据的读取和生成
背景: 近期帮一个公司做第三方API的二次封装,需要部署到该公司网站.所获取的是Json数据格式.由于该公司原系统采用的ASP+VBS技术方案,因此采用VBS对API进行请求.封装. 实现: 废话不多 ...
- 导入导出oracle数据库表的dmp文件
1.先进入命令行,点击开始,输入cmd 2.导入的命令是:imp 用户名/密码@网络服务名 file=xxx.dmp full=y; 3.导出的命令是:exp 用户名/密码@网络服务名 file=xx ...
- CMPP3.0实现物联网卡通讯
当下物联网发展迅猛,物联网卡可以接受短信指令,实现千里之外尽可掌控.本人做过一个这类项目,把相关经验记录下来,分享给需要的人. 物联网卡通讯其实跟电话卡一样,可以使用CMPP协议.不过由于物联网卡位数 ...
- 页断裂(partial write)与doublewrite技术
mysql double write (二次写)是mysql innodb存储引擎的一个重要特性,本人这两天翻阅了相关的资料,结合自己已有的知识,说说自己对double write的理解,供各位看官参 ...
- Windows自动关机命令
winxp中自带了自动关机功能,在开始→运行中使用SHUTDOWN命令 1. 延迟关机关机 shutdown -s -t 120 -s为关机:-t为时间,以秒为单位,120表示2分钟 表示两分钟后关机 ...