隔了1年最近看了看Egret 做了个Demo TP:AE94AD6A

游戏也放上来罢,一个读大学时做的flash小游戏,就打算移植不过,没用用Egret提供的转换工具,全部手写移植,也是为了熟悉下语法

游戏地址 http://www.dreamfairy.cn/h5/poom/

在游戏制作上,看了看还是算蛮成熟的。

EUI的结构类似 MyGUI 且提供了可视化编辑器这店挺爽。 MyGUI官方的编辑器好无语。。

在创建的Game项目模板中,默认是加载所有资源再进游戏,感觉挺不科学,不过在做完这个demo后也就释然了,在微信和opera上跑起来,简单的逻辑就有掉帧2~3帧,不使用webgl. 手机上也用不了,所以只能做小游戏,大型游戏的话就需要打包app了,另说。

语法上,所有的AS3类型,在 egret 包中都基本实现了,不过实践了大半后,觉得一些地方用TS的特点更棒。
比如

public createParticle(idxPos : {x : number, y : number}){
    //TODO
}
请不要无脑复制转载本文, 由 dreamfairy 原创, 转载请注明出处 本文地址 http://www.dreamfairy.cn/blog/2016/01/15/make-a-demo-with-egret/

ASer 转过来一般参数可能会写 idxPos : egret.Point
但是当项目合作有些人不是ASer, 而是JS 同学的话,用Object限制参数类型就是一个很棒的选择,既可以兼容 egret.Point,也可以兼容一个 JS 同学些的 相同属性的 Object 了。

也有一些不科学的地方
比如 所有的成员属性,都需要以 “this.” 开始,好烦
函数定义不需要中间的 “function”表示,经常容易写错。 比如这样写是错的 : public function 函数名
没有const, int 等等。

同时在开发的时候,一些新的特性有兼容问题
比如我写了个 map = new map 在 opera浏览器上正常解析, 在微信中打开会出现创建失败, 所以map 都用传统的 {} 就好,也万能。。。

然后说说配置问题
egret的资源都配置在 json 中。 但是假如游戏交付后,一些前端web同学不熟悉你的配置,想修改游戏中的一些初始信息就不方便了。

所以完全可以前端web同学在游戏的 index.html 中配置一些初始属性给游戏用
比如这样
index.html

<head>
    <ts_param id="xxx" str="fuck me"/>
</head>
<body>

在TS中可以这样读取

        var x = document.getElementById("xxx");
        var data = x.getAttribute("str");
        consolog.log(data); // output = fukc me

是不是很方便~~

最后JS 和 TS 之间的交互也非常简单,熟用 window 这个中介即可

举个例子,我想TS调用JS的一个函数,然后JS函数中创建一句话回传给TS,TS再从html中读取一个参数后合并字符串返回给JS. 最后JS弹窗显示这句话。

首先在 JS 中顶一个函数像这样

    <script>
        function myFunction()
        {
            var str = 'Hello World Java Script!';
            var tsFun = window["TS_Main"].onJsCallMe;
            if (tsFun) {
                var result = tsFun(str);
                alert(result);
            }
        }
    </script>

在TS中这样写

//test call js
var jsFun = window["myFunction"];
if (null != jsFun) {
   window["TS_Main"] = this;
   jsFun();
}

    //test js call ts
    public onJsCallMe(str: any): any {
        //test get html data
        var x = document.getElementById("xxx");
        var data = x.getAttribute("str");
        return data.toString() + " and " + str;
    }

是不是很有意思, 使用 window[“TS_Main”] = this; 就可以不需要定义静态方法了,这样的话,也起到了函数的分类作用,用window的一个key 来标示所在类

最后放个游戏的源码,在git上
https://github.com/dreamfairy/EgretPooms