前言:

  昨天的文章中简单的介绍了Egret白鹭引擎从安装到基本的使用配置等问题,今天着重介绍H5小游戏开发的起步阶段,如Wing面板的使用,素材的处理,类的说明,开始布局等等。

整体概况:

    根据上一篇文章的提示,我们找到index.html,将帧率data-frame-rate修改成60。根据设计图宽高,我将data-content-width设成640,data-content-height设成1038;

  就是下图不包括微信工具栏的高度。至于适配模式我先设成exactFit,以canvas的渲染模式运行,这些可根据实际需求设定

  

  保存设置后我们可以关闭index.html了,然后点击Wing面板工具栏中的“构建并运行”按钮,或者点击“项目”—“运行”。

  如图所示:

  

  运行后,Wing会启动你的默认浏览器并以服务器环境方式打开该项目的index页面,为了显示和调试方便,我直接用F12以手机模式浏览。

  如果编译和运行成功,你会看到如下的Egret的默认页:

  

  接下来我们找到项目中的SRC目录,并打开LoadingUI.ts,这是官方预设的loading页面的LoadingUI类。

  它的效果如图所示,我们可以在chrome控制台中降低网速来查看loading页的效果。

  

处理代码:

  接下来我们就要开始操作代码了,我们找到项目src目录下的“主类”,但是Main并非是真正的主类,它跟C等其他的语言的主类不同,不过基本功能是一样的,就是进入主程。

  由于官方给我们提供了一个案例,所以我打开Main.ts并把预设的一些效果和注释删除

  

  

  但是Main类下的createBitmapByName()方法,以及前面的加载资源以及配置都要留下来,这部分是我们需要复用的。

  把没有用的代码删去之后,我们就要写自己的代码了。摁ctrl+s保存代码,点击“项目”并勾选“自动构建”可以在保存后自动编译,然后我们打开浏览器并刷新,我们现在可以看到什么都没有。

  

 处理资源:

  当我们把冗余的代码删去之后,同时我们也要把预置的资源素材删去,首先我们进入resource目录下,把assetconfig文件夹下的所有素材删掉。

  删除完之后就把自己需要的素材,例如图片和音频等放置于asset目录下,而配置文件json之类的则放置于config目录下。

  注意,default.res.json这个资源配置文件不可删除哦,但可以修改名字和路径,一般减少出错我们就让它保持原样就好。

  

  当我们把自己使用到的资源放置于asset目录下后,我们再回到wing面板,点击default.res.json进入资源管理界面并刷新,假如你在resource目录下新增了素材,就会弹出以下窗口。

  点击“”,则自动添加所有资源到json资源配置文件default.res.json中。
  注意:假如资源中有黄色提示框,则表示该资源已被删除,应该将该配置项同步删去或者修改路径。点击右键,删除资源。

  

  

  在资源配置页,我们可以看到下方有个资源组。它的意思是我们可以分不同的组别或者批次来加载资源。

  譬如在场景一,我们只需要用到部分资源,我们就可以把这部分资源独立放置在一组,进入场景一时进行预加载。

  假设到了场景二,我们则继续把场景二那一组资源进行加载,加载完再继续使用。这样可以达到分批加载的效果。

  

  现在这个案例,暂时先用到一个组。所以我会把所有资源拖进preload当中,在进入游戏之前全部加载。

  把全部资源拖进去了preload组之后,已选用的资源会显示另外一种背景色。然后我们点击ctrl+s进行保存。

  

  我们除了可以使用拖拉选用资源外,我们还可以使用代码进行配置,手动修改json。我们可以点击资源面板的左上角“源代码”按钮查看刚刚我们保存的素材配置。

  

  “groups”:代表的是我们使用了多少个资源组,每个资源组分别需要加载什么素材,这个资源组叫什么等等。这些所有都使用字符串命名的方式进行辨识。

  “resources”:则涵盖了所有的资源名字类型以及其路径。注意的是这里不需要使用绝对路径,绝对路径稍后会在Main类中配置。

  另外,资源配置的命名规则等等的设置可以通过点击“项目”-“项目属性”打开配置面板,然后按照个人喜好进行修改。

  

  接着我们回到Main.ts中,找到Res.loadConfig()方法

  该方法的第一个参数代表的是这个配置文件json的路径,而第二个参数代表的是里面加载的资源的路径前缀,一般情况下可以使用相对路径,但我们也可以写成外部变量,方便修改成绝对路径。

  

  在上述步骤完成后,我们就可以进行基本的编码了。在编码之前,我们先看看Main类干了什么。

Main类逻辑:

  由于我们之前已经在index.html页面中声明了入口类(data-entry-class,所以当页面加载完之后,就会自动执行Main类中的构造函数

  并且在这个类构建完成后,会自动添加到舞台(stage)

  1、实例化Main类

    这个过程是我们创建好Main类后,由Egret内部完成的,对于我们来说是不可见的,我们把Main设为入口类就好。

  

  2、constructor初始化

    在实例化Main类的过程中,本类的构造函数会被自动调用,进而初始化一些我们要用数据或方法

  这里由于Main继承自白鹭的基本容器egret.DisplayObjectContainer并且会自动添加到舞台中,所以在初始化阶段给Main绑定了添加到舞台事件,用于启动界面。

  

  3、Main实例化完成并添加到舞台

    由于这一步对我们来说,是不可见的,在我们定义好Main类并且运行程序后,egret会自动执行这一步。

  4、Main被添加到舞台,触发旗下的onAddToStage方法

    触发了onAddToStage方法后会将LoadingUI类实例化,并添加到界面,这时候我们就可以看见一个白屏和初始的加载进度了。

  然后我们可以绑定加载配置文件完成事件之后执行的方法,并且执行RES.loadConfig(),开始加载json配置文件。

  

  5、配置文件加载完成后,执行onConfigComplete方法

    移除CONFIG_COMPLETE配置完成事件,分别绑定资源组加载完成(GROUP_COMPLETE执行的方法、

  资源组加载出错(GROUP_LOAD_ERROR资源文件加载进度(GROUP_PROGRESS要执行的方法、资源项加载出错(ITEM_LOAD_ERROR要执行的方法。

  接着正式开始执行RES.loadGroup()并加载资源组(默认preload)里面的资源。

  

  6、正在加载资源,触发RES.ResourceEvent.GROUP_PROGRESS并执行onResourceProgress方法

    在这个过程中,会不断地调用LoadingUI中的公共方法setProgress(event.itemsLoaded, event.itemsTotal);

  GROUP_PROGRESS事件会返回当前已加载的数量event.itemsLoaded,以及加载资源的总数event.itemsTotal,我们可以利用这两个数值进行一些进度的显示。

  

  7、资源组加载完成,触发RES.ResourceEvent.GROUP_COMPLETE并执行onResourceLoadComplete方法

    将loading页面移出舞台,移除之前绑定的一些加载事件,并且执行createGameScene()方法。

  

  8、开始绘制游戏场景

     在上述基本的加载以及准备阶段完成后,我们就可以开始绘制我们的游戏场景啦。当然,现在什么都没有,空空如也。

  但是,我们已经完成了基本步骤啦。下一节,我将会继续详细讲解游戏的代码开发部分啦。

  

  接下来将继续更新第三篇,敬请期待。

  转载请注明出处,谢谢。

  

Egret白鹭H5小游戏开发入门(二)的更多相关文章

  1. Egret白鹭H5小游戏开发入门(三)

    前言: 在上一篇文章中着重介绍了H5小游戏开发的起步阶段,如Wing面板的使用,素材的处理,类的说明等等,那么今天主要是涉及到场景的创建,loading的修改等等的代码编写. 对于这一节,我在讲解的过 ...

  2. Egret白鹭H5小游戏开发入门(一)

    前言: 好久没更新博客了,以前很多都不会,所以常常写博客总结,倒是现在有点点经验了就懒了.在过去的几个月里,在canvas游戏框架方面,撸过了CreateJS,玩得了Egret,又学过PIXI.js. ...

  3. .Net Core ORM选择之路,哪个才适合你 通用查询类封装之Mongodb篇 Snowflake(雪花算法)的JavaScript实现 【开发记录】如何在B/S项目中使用中国天气的实时天气功能 【开发记录】微信小游戏开发入门——俄罗斯方块

    .Net Core ORM选择之路,哪个才适合你   因为老板的一句话公司项目需要迁移到.Net Core ,但是以前同事用的ORM不支持.Net Core 开发过程也遇到了各种坑,插入条数多了也特别 ...

  4. 重拾H5小游戏之入门篇(二)

    上一篇,水了近千字,很酸爽,同时表达了"重拾"一项旧本领并不容易,还有点题之效果.其实压缩起来就一句话:经过了一番记忆搜索,以及try..catch的尝试后,终于选定了Phaser ...

  5. 开发H5小游戏

    Egret白鹭H5小游戏开发入门(一)   前言: 好久没更新博客了,以前很多都不会,所以常常写博客总结,倒是现在有点点经验了就懒了.在过去的几个月里,在canvas游戏框架方面,撸过了CreateJ ...

  6. 从零开始开发一款H5小游戏(二) 创造游戏世界,启动发条

    本系列文章对应游戏代码已开源 Sinuous game 上一节介绍了canvas的基础用法,了解了游戏开发所要用到的API.这篇文章开始,我将介绍怎么运用这些API来完成各种各样的游戏效果.这个过程更 ...

  7. 一、微信小游戏开发 --- 初次在微信开发者工具里跑Egret小游戏项目

    尝试下Egret的小游戏开发,学习,学习,干IT,不学习,就得落后啊... 相关教程: Egret微信小游戏教程 微信公众平台-微信小游戏教程 微信公众平台-微信小游戏接入指南 开发版本: Egret ...

  8. 从零开始开发一款H5小游戏(三) 攻守阵营,赋予粒子新的生命

    本系列文章对应游戏代码已开源 Sinuous game. 每个游戏都会包含场景和角色.要实现一个游戏角色,就要清楚角色在场景中的位置,以及它的运动规律,并能通过数学表达式表现出来. 场景坐标 canv ...

  9. 【转帖】H5 手机 App 开发入门:概念篇

    H5 手机 App 开发入门:概念篇 http://www.ruanyifeng.com/blog/2019/12/hybrid-app-concepts.html 作者: 阮一峰 日期: 2019年 ...

随机推荐

  1. Leetcode-463 Island Perimeter

    #463. Island Perimeter You are given a map in form of a two-dimensional integer grid where 1 represe ...

  2. ArchLinux安装指南

    将ArchLinux作为进阶Linux发行版,主要看重滚动更新和深入理解Linux的安装过程. 由于是新手,所以先选择在公司电脑上用VMware来安装.然后渐进到借助U盘在win10笔记本上安装双系统 ...

  3. 【hadoop摸索系列】记录使用libhdfs访问hdfs的关键问题

    hadoop官方的二进制发布版本一直是32位平台编译的,对于java来说跨平台不影响使用,但是为了在c/c++程序中操作hdfs就做不到了,因为libhdfs.so是二进制不兼容的. 我使用的是sta ...

  4. python发送邮件及附件

    今天给大伙说说python发送邮件,官方的多余的话自己去百度好了,还有一大堆文档说实话不到万不得已的时候一般人都不会去看,回归主题: 本人是mac如果没有按照依赖模块的请按照下面的截图安装 导入模块如 ...

  5. Cordova+Asp.net Mvc+GIS跨平台移动应用开发实战1-系统初步搭建(附演示,apk,全部源码)

    1.前言 身处在移动互联网的今天,移动应用开发炙手可热,身为程序猿的我们怎么能错过开发一款我们自己的APP.本人算是一个基于.net的GIS开发入门者(马上就大四啦), 暑假在学校参加GIS比赛有大把 ...

  6. 使用CSS3 Media Queries实现网页自适应

    原文来源:http://webdesignerwall.com 翻译:http://xinyo.org 当今银屏分辨率从 320px (iPhone)到 2560px (大屏显示器)或者更大.人们也不 ...

  7. geotrellis使用(五)使用scala操作Accumulo

    要想搞明白Geotrellis的数据处理情况,首先要弄清楚数据的存放,Geotrellis将数据存放在Accumulo中. Accumulo是一个分布式的Key Value型NOSQL数据库,官网为( ...

  8. SPIRE.DOC - .NET开发者的福利

    SPIRE.DOC - .NET开发者的福利 前面我们使用过Spire.XLS for .NET Component创建Excel文件.最近试用了下.DOC 方面的API.这次测试的产品是.通过使用S ...

  9. Java服务器对外提供接口以及Android端向服务器请求数据

    转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/5056780.html 讲解下java服务器是如何对移动终端提供接口的,以什么数据格式提供出去,移动端又是怎么 ...

  10. C# 操作数据库表和数据库

    <1>c#创建数据库表: private void CreatTable(string name)      //创建数据库源数据表,name为表名 { con.ConnectionStr ...