zoukankan      html  css  js  c++  java
  • egret 小知识点汇总

    新手入门参考教程(https://zhuanlan.zhihu.com/p/33686439)

    1. egret.getTimer()  记录启动egret框架以来经过的毫秒数

    2. 如何配置RES资源组 (添加组后将左边的资源拖拽过去就可以了)

     

    1 RES.addEventListener(RES.ResourceEvent.GROUP_COMPLETE, this.onResourceLoadComplete, this);
    2 RES.addEventListener(RES.ResourceEvent.GROUP_LOAD_ERROR, this.onResourceLoadError, this);
    3 RES.addEventListener(RES.ResourceEvent.GROUP_PROGRESS, this.onResourceProgress, this);

    event.groupName, event.itemsLoaded, event.itemsTotal 分别是组的名称,已经加载了多少和这个组总共有多少资源

    3. this.stage.stageWidth, this.stage.stageHeight 在所有其他继承类(egret.Sprite, eui.Group等)中都可以获取得到,因为所有的显示对象都继承自DisplayObjectContainer => DisplayObject;

    4. 自定义事件

    // event<string>, bubble<boolean>, data<any>
    this.dispatchEventWith( event, bubble, data );
    
    this.dispatchEventWith( GameEvents.EVT_LOAD_PAGE, false, this._pageFocused );
    
    this._homeUI.addEventListener( GameEvents.EVT_LOAD_PAGE, ( evt:egret.Event )=>{
        console.log( "EVT_LOAD_PAGE:", evt.data );
        this.loadPage( evt.data );
    }, this );

    5. 数组定义 dsListHeros:Array<Object> 或者 dsListHeros:Object[]

    6. 发布微信小游戏只支持5.1.x以后的引擎版本

    7. exml深层级的嵌套,单纯采用控件是不能够满足的,此时我们可以在“源码”修改相应的布局,修改完后,并不能在“属性面板”那里体现出来,因为识别不了

    8. this.listHeros.dataProvider = new eui.ArrayCollection( dsListHeros ); //dataProvider:eui.ICollection

    9. RES资源版本控制借鉴思考https://blog.csdn.net/sujun10/article/details/77231215

    10. RES.loadGroup中使用await和不使用的区别

    1 await RES.loadGroup("preload", 0, loadingView);
    2 //await的话,不会触发‘GROUP_COMPLETE’事件,把await去掉则能触发事件
    3 RES.addEventListener(RES.ResourceEvent.GROUP_COMPLETE, this.onResourceLoadComplete, this);

    11. 缓动对象的缓动变化事件

    var funcChange = function():void{
                
        if(this.y === 650 ){
            console.log( this.y);//这里的this为topMask
        }
    }
    var tw = egret.Tween.get( topMask, { loop: true, onChange:funcChange, onChangeObj:topMask } );
    
    tw.to( {y:650}, 10000 , egret.Ease.backInOut);

    12. 资源获取

    ① 使用XMLHttpRequest

    ② 使用白鹭API

    RES.getResByUrl(url,function(data:string):void
    {
        console.log(data);
    },this,RES.ResourceItem.TYPE_TEXT);
    //处理返回json格式的结果
    RES.getResByUrl(url,function(data:Object):void
    {
        console.log(data);
    },this,RES.ResourceItem.TYPE_JSON);
    
    //使用白鹭的HttpRequest
    var httpRequest:egret.HttpRequest = new egret.HttpRequest();
    httpRequest.responseType = egret.HttpResponseType.TEXT;
    //解决跨域问题添加的请求头
    httpRequest.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8");
    httpRequest.addEventListener(egret.Event.COMPLETE,function(evt:egret.Event):void
    {
         var data:string = httpRequest.response;
         console.log(data);
    },this);
    httpRequest.open("http://192.168.0.166:8080/game/cmgeLogin",egret.HttpMethod.POST);
    httpRequest.send();

    ③ 使用egret.URLLoader

    //demo 其中部分变量为作者本身的配置项
    class DataTableManager {
        public static SERVER_DATA_GET:string = "server_data_get";
        public static STATIC_TABLE_DATA_END: string = "static_table_data_end";
    
        public static isLoad: boolean = false;
    
        //所有静态表初始化
        public static init() {
            this.isLoad = false;
    
            //改成加载json文件的方式
            function complete(event: egret.Event) {
                var loader: egret.URLLoader = <egret.URLLoader>event.target;
    
                DataTableManager.setData(JSON.parse(loader.data));
            }
    
            function error(event: egret.Event): void {
                alert("静态json文件加载错误");
            }
    
            //创建 URLLoader 对象
            var loader: egret.URLLoader = new egret.URLLoader();
            //设置加载方式为文本
            loader.dataFormat = egret.URLLoaderDataFormat.TEXT;
            //添加加载完成侦听
            loader.addEventListener(egret.Event.COMPLETE,complete,this);
            loader.addEventListener(egret.IOErrorEvent.IO_ERROR,error,this);
            var request: egret.URLRequest = new egret.URLRequest(GameConfig.RESOURCE_PATH + GameConfig.STATIC_TABLE_DATA_URL + "?v=" + GameConfig.VERSION);
            //开始加载
            loader.load(request);
        }
    
        /**接收所有静态表数据*/
        private static setData(data: any) {
            PetTableData.setData(data["fb_game_dog_pet"]);
            PayTableData.setData(data["pay_table"]);
            this.isLoad = true;
            EventManager.dispatchEvent(DataTableManager.STATIC_TABLE_DATA_END,true);
        }
    
    }
    

    13 游戏虚拟摇杆 http://bbs.egret.com/thread-28113-1-1.html

    14 Texture Merger 制作字体纹理和动画

    ① 制作字体纹理(参照官网)

    注意点:虽然是以键值对的形式引用的,但是键只允许是长度为1的字符,且如果出现同名,会被覆盖,可通过scaleX和scaleY来控制字体的大小

    letterSpacing来控制字体间距;

    ② 制作动画(参照官网)

    注意点:导出的动画可以是多个gif的合成,通过不同的名字从而调用就可以了

    module Componment {
        export class Dog extends egret.MovieClip {
            public dogMovie: egret.MovieClipDataFactory
            constructor() {
                super();
                this.dogMovie = new egret.MovieClipDataFactory(RES.getRes("gqdog_json"), RES.getRes("gqdog_png"));
                
                this.movieClipData = this.dogMovie.generateMovieClipData("website")
                this.play(-1);
                this.touchEnabled = true;
                this.addEventListener(egret.TouchEvent.TOUCH_TAP, () => {
                    this.movieClipData = this.dogMovie.generateMovieClipData("twoMore")
                    this.play(-1)
                },this)
                //可以添加帧事件  
                this.addEventListener(egret.MovieClipEvent.FRAME_LABEL,(e:egret.MovieClipEvent)=>{
                     console.log(e,e.frameLabel,this.currentFrame);
                 },this);
            }
        }
    }

    15 循环播放tween动画,说官方没解决?先放着先

    //循环播放EGRET TWEEN动画
    export function playAnimation(target: egret.tween.TweenGroup, isLoop: boolean): void {
        if (isLoop) {
            for (var key in target.items) {
                target.items[key].props = { loop: true };
            }
        }
        target.play();
    }

    16 this.stage.stageHeight报错,如果找不到原因,可以尝试使用egret.MainContext.instance.stage.stageWidth来解决

    17 #00FFFFFF 设置填充颜色为透明

    18 对于切换到后台的操作可以在钩子函数里面调用

    egret.lifecycle.onPause = () => {
        egret.ticker.pause();//退出
    }
    
    egret.lifecycle.onResume = () => {
        egret.ticker.resume();//进来
    }

    19 egret.MainContext.deviceType == egret.MainContext.DEVICE_MOBILE类似这样的判断来检测是手机还是pc端

    20 The cross-origin image错误的问题解决方案 (main.ts里面加上一句代码即可:egret.ImageLoader.crossOrigin = "anonymous";)

    21 

  • 相关阅读:
    【luogu P1343 地震逃生】 题解
    【luogu P3931 SAC E#1
    【luogu P3275 [SCOI2011]糖果】 题解
    【luogu P2947 [USACO09MAR]向右看齐Look Up】 题解
    【luogu P1456 Monkey King】 题解
    【luogu P3377 左偏树(可并堆)】 模板
    【luogu P1993 小K的农场】 题解
    Sqlmap注入Base64编码的注入点
    kali高速更新源以及主题修改方法
    DiscuzX3.1搬家全过程
  • 原文地址:https://www.cnblogs.com/luguiqing/p/9361085.html
Copyright © 2011-2022 走看看