Egret使用心得

Egret使用心得转自:https://www.indienova.com/u/monkeybean/blogread/2188一、曾用工具介绍EgretEngine,个人使用引擎版本从1.7.3到3.1.4。Egret配套工具:1.界面排布及部分属性预设—EgretWing2.碎图压缩合成大图及MovieClip动画素材处理—TextureMerger3.资源管理—Re

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

转自:https://www.indienova.com/u/monkeybean/blogread/2188


一、曾用工具介绍

Egret Engine,个人使用引擎版本从1.7.3到3.1.4。

Egret配套工具:

1.界面排布及部分属性预设—Egret Wing

2.碎图压缩合成大图及MovieClip动画素材处理—TextureMerger

3.资源管理—ResDepot

4.chrome下调试插件—Egret Inspector

5.粒子效果制作—EgretFeather

6.项目管理及代码编辑,IDE—Webstrom,文本编辑器—sublime

7.流程图等UML图制作—Visio

8.版本控制,svn及git在不同项目中均用过

9.在线图片压缩—tingPng.com

10.远程登录及管理文件—Winscp、Xshell、secureCRT

11.项目协作—teambition

12.图片处理及格式转换—PhotoShop及格式工厂

13.数据统计—dataEye、talkingData、友盟

14.来路不明的合图抠图—pngSplit

15.Json转换如Excel数据转为Json—http://www.bejson.com/,策划数据与开发对接使用

16.二维码生成—cli.im

二、开发常用代码及参数说明
1.index.html中,data-entry-class = “Main”,进入游戏访问的第一个Ts文件,入口类;data-orientation=”auto”,旋转方向设置;data-frame-rate = “60”,游戏帧率设置,可更改,建议为60的约数,正式项目基本设置为60,测试时更改。data-show-fps=”false”,默认为false,开启后可看到实时帧率,测试使用;data-show-log = “false”,默认为false,开启后,代码中egret.log()中的内容即显示在屏幕中,测试使用。

2.开启fps后的参数说明。FPS为帧率;Draw为每帧draw方法调用的平均次数,脏矩阵占舞台的百分比;Cost为每帧舞台所有事件处理及矩阵运算耗时,绘制显示对象耗时(单位为ms)。

3.是否已进行新手引导等数据可存储在本地浏览器中,如LocalStorage.setItem(“new_guide”,”done”)。

4.延时及计时器,如下:

var key:number = egret.setTimeout(function(){

      //执行事件

      egret.clearTimeout(key);

},this,500);  

类似的还有egret.setInterval();注意执行完毕的clear。

计时器如下:

class Heart
{

     public timer:egret.Timer;

     public constructor()

     {

          this.timer = new egret.Timer(100);
          this.timer.addEventListener(egret.TimerEvent.TIMER, this.onTimer, this);

          this.timer.start();

      }

      private onTimer(e:egret.TimerEvent):void
      {

      }
}

5.对象包含属性较多,采用Object类型,如public Obj_operate:Object = {};

6.动画基本操作,egret.Tween.get(this.m_UI.img_boat,{ loop:true}).to({y:384},2200).to({y:375},2200);

另外,call,pause, wait, remove, removeAll等参考API。

7.重定向设置window.location.href;在新窗口打开,window.open(“链接地址”,’newwindow’,’height=400,width=400,top=100,left=100′);

8.console.log(),console.warn(),console.error(),调试时区分控制台显示。

9.播放游戏特效代码,以下采用的是MovieClip

class Bomb extends egret.Sprite
{

     private mcf:egret.MovieClipDataFactory;
     private mc:egret.MovieClip;
     public constructor()
     {

         super();
         this.init();
     }
     public init(str1:string,str2:string,number:number):void
     {

         var data = RES.getRes(str1);
         var tex = RES.getRes(str2);
         this.mcf = new egret.MovieClipDataFactory(data, tex);
         this.mc = new egret.MovieClip();
         this.mc.movieClipData = this.mcf.generateMovieClipData();
         this.mc.play(number); //playTimes:number — 播放次数。 参数为整数,可选参数,>=1:设定播放次数,<0:循环播放,默认值 0:不改变播          放次数(MovieClip初始播放次数设置为1),
         this.addChild(this.mc);
         this.mc.addEventListener(egret.Event.COMPLETE, this.removeBomb, this);
     }
     //轰炸完毕
     private removeBomb(evt:egret.Event):void
     {

          if(this.parent!=null)
          {

               this.parent.removeChild(this);
           }
      }

}

10.在游戏开发过程中,由于Egret声音有问题,后期游戏选择引入第三方插件,WebAudio。webAudio及使用方法,个人百度网盘下载地址:http://pan.baidu.com/s/1o7F1Z30

11.Egret 3.1.2可设置输入文本样式,支持三种输入样式即普通文本(默认),密码和电话号。代码演示如下:

    var text :egret:TextField = new egret.TextField();

    //设置输入文本

    text.Type = egret.TextFieldType.INPUT;

    //设置输入类型为TEXT,还可设置为密码(PASSWARD),或电话号(TEL)

    text..inputType = egret.TextFieldType.TEXT;

    text.text = “输入文本”;

    text.width = 300;

    this.addChild(text);

三、性能优化

1.Audio

(1)如果需求中需要同时播放多个音频,则使用WebAudio。X5浏览器内核WebAudio可支持多音频。Egret3.1.4之后,index.html文件中,egret.runEgret({renderMode:”webgl”,audioType:0}); 默认的渲染模式为Canvas,之前微信平台上的游戏使用的均为Canvas。音频类型中,默认为0,IOS7以上表示WebAudio;1表示QQ Audio,项目若在腾讯平台上线如QQ空间中的玩吧,则使用QQ Audio,腾讯解析音频有自己的一套方案;2表示强制使用WebAudio;3表示使用浏览器自带的Audio,不推荐。

(2)当多个音频轮询播放播放的时候,如ababa,如果打开网络侦听,有可能发现播放一次向服务器请求一次,原因是不同浏览器内核对音频实现方式不一样。解决方案是:将轮询播放的多个音频拼成一个音频,通过时间段控制播放。

(3)由于浏览器的安全限制,加载完成可能无法自动播放背景音乐,这种情况将背景音乐设置成点击播放的形式,如加载完成后,弹出按钮,玩家点击选择是否播放背景音乐。主流H5游戏均是采用这种方式。

2.Text

(1)文本输入过程中,不要改变Canvas大小,如屏幕大小更改(横竖屏切换)。

(2)TextField中使用cacheAsBitmap,可以减少重绘次数。原因是TextField是文本,浏览器渲染通过CPU的计算,对图片渲染速度快,对文本渲染速度慢。

(3)TextField减少对于描边(stroke)的使用,用图片代替。

(4)输入文本框尽量出现在软键盘的上面,手机部分浏览器中,如果输入文本框太靠下,弹出的软键盘会遮挡住输入文本框。

3.Image

(1)单张图(包括SpriteSheet)的大小不要超过1024*1024,浏览器对图片大小限制会对超过的该尺寸大小的图片进行自动压缩处理导致图片模糊发虚。

(2)将碎图合成一张大图,每次进行图片下载时会先进行TCP三次握手协议,这个时间会超过较多小图下载的时间。

(3)使用九宫格时,不要使用非整数宽高;在List控件中不要使用九宫格图片来减少draw的次数。

(4)单静态页面,cacheAsBitMap可以减少重绘次数。如在大图中取出部分碎图组成的单静态页面。

(5)使用SpriteSheet合并的图片尺寸要优于单张图片的总尺寸,尤其是带透明通道的。

4.NetWork

(1)素材处理。不要一次性下载太多的素材,尽量分布在使用前加载。将碎图和成一张大图,减少下载次数。Png图可以使用压缩工具(如TinyPng)压缩减少体积。

(2)配置文件。尽量将配置文件合并到一个大文件里,减少下载次数。在Http请求中,加载单个文件速度要优于加载多个文件。配置文件去掉格式化,利用在线Json格式化工具(如bejson,sojson)处理Json数据。Json数据可以去掉一些不必要的小数和冗长命名。

(3)下载处理。资源服务器开启GZIP压缩,提高载入速率;登录加主页面素材不要超过2M;加入静默加载,比如在登录界面操作时下载主页面相关素材。

5.Mask

(1)遮罩如果是DisplayObject,必须加入到显示列表后,方能正常使用。

(2)遮罩如果是Rectangle,修改遮罩数据后,重新将遮罩赋值给对象。

6.DisplayObject

(1)Shape/DisplayObjectContainer,能通过父层计算出来的交互不直接在子容器里加。如EUI中,Group组件中有Image组件,Touch Image的监听直接将Touch监听加在Group上,如果是一个Group中有多张图需要有监听事件,可在Group上加一个监听,根据Group的Touch位置进行响应。

(2)禁用不必要显示对象的触摸交互,默认就是关闭的。但是开发时,自己的写的底层框架可能又给打开了,eui的touchenable是默认打开的,不需要touch事件监听时需手动关闭。触摸屏幕实际上就是触摸canvas,canvas根据位置在显示列表中逐层搜索,实际上也是碰撞检测。

   var sp :egret.Sprite = new egret.Sprite();

   this.addChild(sp);

   sp.touchChildren = false; //确定子孙对象是否接受触摸事件,默认为true

   sp.touchEnabled = false; //此对象是否接受触摸事件,默认为true

(3)能用图片的不用Graphics实现。

(4)尽量将静态图或者文字放到一个容器中,并对容器缓存(cacheAsBitMap)。

(5)减少显示对象的旋转缩放。

(6)尽可能重用对象,建立对象池,而不创建对象并对其执行垃圾回收。创建对象时,将对象创建在循环外部并在循环内反复重用。需要密集的创建对象,要引入对象池,例如做一款打飞机类型的游戏,进入战斗前,飞机,怪物,掉血特效等对象提前初始化,在过程中实时提取,而不是实时创建。

7.对象复用与释放

(1)Event派发要合理使用Event自带的静态方法,如egret.Event.dispatchEvent(this,”dragonbones”)。

(2)事件删除,用完事件即删除。

(3)Tween循环结束时,删除。

(4)显示列表删除,面板不使用则remove掉。

(5)回调删除,很多删除是在回调函数内完成的。

(6)显示停止计时器,让它们准备好进行垃圾回收。暂停清除计数器clearInterval()、clearTimeout()、Timer.stop()。

(7)删除对象的所有引用确保被垃圾回收器回收。

(8)删除资源RES.destroyRes(“”)。

8.TypeScipt

(1)尽量不要在使用方法内创建函数,一个函数内不要嵌套另一个函数的定义。

(2)Ts中没有super属性的调用,Js类继承的本质是通过原型链实现的,但是egret提供了egret.superGet 和 egret.superSet 来调用父类属性。

(3)类方法中,将this赋值给另一个临时变量self,var self = this;如果当前类this使用较多,如for循环内使用时,使用self。

(4)不要使用特殊的正则表达式,过于复杂可能会出现识别出错。

(5)不要在声明的时候初始化对象,需要赋值基本类型。可选择使用前初始化。

9.其他

(1)LocalToGlobal后的坐标不要有小数;一般情况下坐标计算等也尽量不使用小数。

(2)对象复用比较高时,如打飞机的子弹,使用对象池优化。

(3)尽量减少Alpha混合的使用。

(4)多次调用类属性时,避免直接使用this,如果for循环一直用到this.a,可var _a = this.a,用变量做简单缓存再去计算,效率就会提升,如_length = Array.length。

(5)Event.ENTER_FRAME数量控制。MainLoop包括ENTER_FRAME(每帧主要执行逻辑)->CLEAR(清空上一帧图像) ->UPDATE TRANSFORM(计算这一帧的显示) -> UPDATE DRAW。

(6)位移如跑酷游戏的计算不要通过帧数来计算,通过时间来计算。

(7)使用60的约数作为帧频数。Egret自带Timer,每秒固定振荡60次。

(8)对于简单的动画,使用序列帧或者db的急速模式。

(9)非动作游戏降低帧率可大幅提高性能。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/214283.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 时滞微分方程求解_泛函微分方程内容设计

    时滞微分方程求解_泛函微分方程内容设计时滞微分方程(DDE)是当前时间的解与过去时间的解相关的常微分方程。该时滞可以固定不变、与时间相关、与状态相关或与导数相关。要开始积分,通常必须提供历史解,以便求解器可以获取初始积分点之前的时间的解。常时滞DDE具有常时滞的微分方程组的形式如下:y′(t)=f(t,y(t),y(t−τ1),…,y(t−τk)).y'(t)=f(t,y(t),y(t−τ_1),…,y(t−τ_k)).y′(t)=f(t,y(t),y(t−τ1​),…,y(t−τk​)).此处,t为自变量,y为因变量的列向量,

  • OpenResty 最佳实践学习–安装和helloworld(1)

    一:简介OpenResty® 是一个基于 Nginx 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项。用于方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用、Web 服务和动态网关。OpenResty® 通过汇聚各种设计精良的 Nginx 模块(主要由 OpenResty 团队自主开发)

  • Object转换为String[]数组,或者其他类型的数组

    Object转换为String[]数组,或者其他类型的数组如题:    可以通过向下转型来获得,但是不知道为什么包类异常,最后我采用的方法如下:Objectl=it.remove(-1,1,3);String[]newarray=null;if(l.getClass().isArray()){intlength=Array.getLength(l);newarray=newString[l

  • Android.mk的用法和基础 && m、mm、mmm编译命令「建议收藏」

    Android.mk的用法和基础 && m、mm、mmm编译命令「建议收藏」一个Android.mkfile用来向编译系统描述你的源代码。具体来说:该文件是GNUMakefile的一小部分,会被编译系统解析一次或多次。你可以在每一个Android.mkfile中定义一个或多个模块,你也可以在几个模块中使用同一个源代码文件。选项参考以下文件:build/core/config.mk,默认的值在以下文件中定义:build/core/base_rules.mk。编译系统为

  • axios的安装和使用

    axios的安装和使用文章目录一、axios介绍二、安装axios三、案例一、axios介绍什么是axios?Axios是一个基于promise的HTTP库,可以用在浏览器和node.js中。特性:1、从浏览器中创建XMLHttpRequests2、从node.js创建http请求3、支持PromiseAPI4、拦截请求和响应5、转换请求数据和响应数据6、取消请求7、自动转换JSON数据8、客户端支持防御XSRF浏览器支持:二、安装axios方法一:速.

    2022年10月22日
  • c51单片机选择题_大学生单片机毕业设计

    c51单片机选择题_大学生单片机毕业设计?Hi,大家好,这里是丹成学长的毕设系列文章!?对毕设有任何疑问都可以问学长哦!这两年开始,各个学校对毕设的要求越来越高,难度也越来越大…毕业设计耗费时间,耗费精力,甚至有些题目即使是专业的老师或者硕士生也需要很长时间,所以一旦发现问题,一定要提前准备,避免到后面措手不及,草草了事。以下是学长亲手整理的C51单片机相关的毕业设计选题,都是经过学长精心审核的题目,适合作为毕设,难度不高,工作量达标,对毕设有任何疑问都可以问学长哦!相对容易工作量达标题目新颖,含创新点?https。…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号