网站换皮肤了
egret使用reflect-metadata第三方库
时间:2018-09-04 11:19 浏览:363

摘要

egret engine 5.2.8引擎配置使用reflect-metadata第三方库

准备

npm install reflect-metadata

先使用以上命令下载“reflect-metadata”,然后将“node_modules/reflect-metadata”,复制到egret项目中。

配置

tsconfig.json

{
    "compilerOptions": {
        "target": "es5",
        "outDir": "bin-debug",
        "experimentalDecorators": true,
        "emitDecoratorMetadata": true,
        "lib": [
            "es5",
            "dom",
            "es2015.promise"
        ],
        "types": []
    },
    "include": [
        "src",
        "libs",
        "reflect-metadata"
    ]
}

egretProperties.json

{
 "engineVersion": "5.2.8",
 "compilerVersion": "5.2.8",
 "template": {},
 "target": {
 "current": "web"
 },
 "modules": [
 {
 "name": "egret"
 },
 {
 "name": "game"
 },
 {
 "name": "tween"
 },
 {
 "name": "socket"
 },
 {
 "name": "assetsmanager"
 },
 {
 "name": "promise"
 },{
 "name":"reflect",
 "path":"./reflect-metadata"
 }
 ],
 "targets": {
 "android": {
 "appname": "test",
 "packagename": "com.zhangwenbing.test"
 }
 }
}


测试代码

Main.ts

//////////////////////////////////////////////////////////////////////////////////////
//
//  Copyright (c) 2014-present, Egret Technology.
//  All rights reserved.
//  Redistribution and use in source and binary forms, with or without
//  modification, are permitted provided that the following conditions are met:
//
//     * Redistributions of source code must retain the above copyright
//       notice, this list of conditions and the following disclaimer.
//     * Redistributions in binary form must reproduce the above copyright
//       notice, this list of conditions and the following disclaimer in the
//       documentation and/or other materials provided with the distribution.
//     * Neither the name of the Egret nor the
//       names of its contributors may be used to endorse or promote products
//       derived from this software without specific prior written permission.
//
//  THIS SOFTWARE IS PROVIDED BY EGRET AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
//  OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
//  OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
//  IN NO EVENT SHALL EGRET AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
//  INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
//  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;LOSS OF USE, DATA,
//  OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
//  LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
//  NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
//  EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
//
//////////////////////////////////////////////////////////////////////////////////////

class Main extends egret.DisplayObjectContainer {



    public constructor() {
        super();
        this.addEventListener(egret.Event.ADDED_TO_STAGE, this.onAddToStage, this);
    }

    private onAddToStage(event: egret.Event) {

        egret.lifecycle.addLifecycleListener((context) => {
            // custom lifecycle plugin

            context.onUpdate = () => {

            }
        })

        egret.lifecycle.onPause = () => {
            egret.ticker.pause();
        }

        egret.lifecycle.onResume = () => {
            egret.ticker.resume();
        }

        this.runGame().catch(e => {
            console.log(e);
        })



    }

    private async runGame() {
        await this.loadResource()
        this.createGameScene();
        const result = await RES.getResAsync("description_json")
        this.startAnimation(result);
        await platform.login();
        const userInfo = await platform.getUserInfo();
        console.log(userInfo);

    }

    private async loadResource() {
        try {
            const loadingView = new LoadingUI();
            this.stage.addChild(loadingView);
            await RES.loadConfig("resource/default.res.json", "resource/");
            await RES.loadGroup("preload", 0, loadingView);
            this.stage.removeChild(loadingView);
        }
        catch (e) {
            console.error(e);
        }
    }

    private textfield: egret.TextField;

    /**
     * 创建游戏场景
     * Create a game scene
     */
    private createGameScene() {

    }

    /**
     * 根据name关键字创建一个Bitmap对象。name属性请参考resources/resource.json配置文件的内容。
     * Create a Bitmap object according to name keyword.As for the property of name please refer to the configuration file of resources/resource.json.
     */
    private createBitmapByName(name: string) {
        let result = new egret.Bitmap();
        let texture: egret.Texture = RES.getRes(name);
        result.texture = texture;
        return result;
    }

    /**
     * 描述文件加载成功,开始播放动画
     * Description file loading is successful, start to play the animation
     */
    private startAnimation(result: string[]) {
        console.log(this.say("test"));
    }

    @meta
    private say(myName: string): string {
        return `hello, ${myName}`
    }
}

function meta (target: any, propertyKey: string) {

    // 获取成员类型
    let type = Reflect.getMetadata('design:type', target, propertyKey)
    // 获取成员参数类型
    let paramtypes = Reflect.getMetadata('design:paramtypes', target, propertyKey)
    // 获取成员返回类型
    let returntype = Reflect.getMetadata('design:returntype', target, propertyKey)
    // 获取所有元数据 key (由 TypeScript 注入)
    let keys = Reflect.getMetadataKeys(target, propertyKey)


    console.log(keys) // [ 'design:returntype', 'design:paramtypes', 'design:type' ]
    // 成员类型
    console.log(type) // Function
    // 参数类型
    console.log(paramtypes) // [String]
    // 成员返回类型
    console.log(returntype) // String
}




如果这篇文章对你有所帮助,可以通过下边的“打赏”功能进行小额的打赏。

本网站部分内容来源于互联网,如有侵犯版权请来信告知,我们将立即处理。


来说两句吧