最近用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