最近用layaair2开发了个微信的小程序,遇到一些问题,不过都解决了,现在把要注意的地方记录下来,方便后续开发,也希望能帮助和我一样遇到问题的同学

1.新建的ui场景相当于flash里面的mc,导出模式选分离模式相当于mc的关联类自动导出(这个类不能手工修改,这个地方和flash里面不一样),注意一定要选分离模式,不然ui下面不会自动生成相关类,新建script脚本,自定义ui类放在这个里面,继承对应的ui页面类,在ide里面关联到页面的runtime属性,这样可以直接引用ui页面有var变量定义的元素(这个自定义的继承类就可以像flashmc的导出类一样随便改了)

有人会问name和var的区别:name一般被用来对象池的引用,var用来被ui页面引用

1.1 可以将控制类的脚本拖到场景ui页面上,如果要在控制类里面操作对象池的对象(比如系统提供Image类的对象,或者自定义的类的对象),必须在声明该对象的时候,同时声明面板属性,参考示例代码:

/** @prop {name:dropBox,tips:"掉落容器预制体对象",type:Prefab}*/ 
        public var dropBox:Prefab;

1.2 这样后面的函数就可以从对象池里拿到这个对象啦

var box:Sprite = Pool.getItemByCreateFun("dropBox", this.dropBox.create, this.dropBox);

2.微信屏幕适配,注意入口main文件加上这个

import laya.wx.mini.MiniAdpter;

构造函数里第一行加:

public function Main() {
            //for js
            //定义一个命名空间的属性为myapp,方便外面自定义js引用;
            Browser.window.myapp = this;
            MiniAdpter.init();//for wx
            //GameConfig.width,     GameConfig.height这里可以手工改成mc_stage的大小(GameConfig是ide自动生成的改不了)
            if (window["Laya3D"]) window["Laya3D"].init(GameConfig.width,   GameConfig.height);
            else Laya.init(GameConfig.width, GameConfig.height, Laya["WebGL"]);
}

3.微信小程序后台设置地址(配置服务器域名啥的):https://mp.weixin.qq.com/ 需要微信扫码登陆

4.微信账号登陆及获取用户信息:

4.1 在bin目录下新建wxlogin.js

//wxlogin.js
var gameLogin=new Function()
    {
        wx.login(
        {
            success: (res) => 
            {
                if (res.code) 
                {
                    code= res.code;
                    console.log("登陆成功,获取到code"+code);
                }
                var button = wx.createUserInfoButton(
                {
                    type: 'text',
                    text: '点击进入游戏',
                    style: 
                    {
                        left: wx.getSystemInfoSync().windowWidth/2-70,
                        bottom: wx.getSystemInfoSync().windowHeight/2,
                        width: 140,
                        height: 40,
                        lineHeight: 40,
                        backgroundColor: '#ff0000',
                        color: '#ffffff',
                        textAlign: 'center',
                        fontSize: 16,
                        borderRadius: 4
                    }
                })
                button.onTap((res) => 
                {
                    if(res.errMsg=="getUserInfo:ok")
                    {
                        console.log("授权用户信息")
                        //获取到用户信息
                        wxUserHead = res.userInfo.avatarUrl
                        wxUserName = res.userInfo.nickName
                        //LayaSample.gameLoad.toStartGame()
                        console.log(wxUserHead);
                        console.log(wxUserName);
                        myapp.startGame();
                        //清除微信授权按钮
                        button.destroy()
                    }
                    else
                    {
                        console.log("授权失败")
                    }
                })
            }
        })
    }

4.2 在bin/game.js第一行加入

require("wxlogin.js");

4.3 在src/Main.as里修改函数:

    private function onConfigLoaded():void {
            //加载场景
            //GameConfig.startScene && Scene.open(GameConfig.startScene);
            //for wx_login
            if(Browser.window.gameLogin!=undefined){
                Browser.window.gameLogin();
            }
            else{
                console.log("no login!");
            }
            //startGame(); 
        }

4.4 发布到微信平台,用微信开发工具打开编译即可

4.5 用户信息拿到了,但是需要存储用户数据的话,需要一个唯一标识,微信提供了一个get方法调用wx.login得到的code来获取session_key和openid:

https://api.weixin.qq.com/sns/jscode2session?appid=wx796fdc1d403f4ae7&secret=ed49b3f560d46dd116dbefd5a4c2d6f8&js_code=001QMKab1c34mv0FUIcb1AIabb1QMKax&grant_type=authorization_code

5.关于屏幕适配

我常用的配置:

//main.as
public function Main() {
//根据IDE设置初始化引擎      
    GameConfig.width=375;
    GameConfig.height=667;
    GameConfig.scaleMode="showall";
......
}

详细文档参考http://ldc.layabox.com/doc/?nav=zh-as-1-8-0