拳头大战开发历程2-准备工作
2018-06-21 本文已影响8人
回忆并快
1.自定义数据结构
为了更加方便处理数据,我从github中找到的一个ts库,稍微修改了提供给Laya中使用。
![](https://img.haomeiwen.com/i1924701/22ca4ceb55749a98.png)
优点:用法跟C#的基本一样,支持强类型,操纵数据方便。
举个栗子(数组的增删查改):
var testList: List<string> = new List<string>();
var str: string = "test";
// 增
testList.add(str);
// 删
testList.remove(str);
// 查
var idx: number = testList.indexOf(str);
testList.get(idx);
// 改
testList.set(idx, "haha");
注意事项:
对于Dictionary的遍历,因为我们项目是基于es5的,所以不能使用for of遍历,否则会
有类似报错。
'Type 'Dictionary<number, string>' is not an array type or a string type.'
正确的做法,使用迭代器遍历:
var testDict: Dictionary<number, string> = new Dictionary<number, string>();
testDict.addKeyValue(1, "quinsmpang1");
testDict.addKeyValue(2, "quinsmpang2");
var iterator: ICollection<string> = testDict.values();
var r: IteratorResult<string>;
while (r = iterator.next(), !r.done) {
console.log(r.value);
}
引入办法:把collections,interfaces这两个文件夹拷贝到Laya的src目录下面。
移步下载
2.工具类和函数
在使用typescript编写代码的过程中,想要调用微信的接口,一般来说,可以这么做:
直接window['wx']或者Laya.Browser.window.wx来获取到wx对象,从而调用getUserInfo之类的Api。
虽然这样做没有问题,但是没有代码提示和每次编写都要去查Api文档,非常不方便。
所以我去搜刮了一番github,果然有相关的d.ts描述文件。
只要把这个文件放入libs中跟LayaAir.d.ts同目录,即可直接wx.xxx的方式调用接口而且描述很详细,当然,这个文件不一定包含所有接口,可以参考其他接口,自行根据官方文档维护。
另外,微信的接口,有时候会返回一些加密数据,但是我又想在客户端进行解析的话,如果参考小游戏提供的解密node项目,引入是非常麻烦的,主要我们并没有用到node的环境,引入一个简单微信数据解密库,也是很有必要的~
跟微信那个d.ts一样引入方式。
此外还有3个js文件,需要在index.html引入。
<script type="text/javascript" src="libs/hmac-sha256.js"></script>
<script type="text/javascript" src="libs/aes.js"></script>
<script type="text/javascript" src="libs/enc-base64.js"></script>
根据wx接口返回的encryptedData和iv进行解密(getUserInfo,getWeRunData等接口返回的数据都可以使用),同样使用node的后台也可以引入使用。
public static decodeData(sessionKey: any, encryptedData: any, iv: any) {
var key:any = CryptoJS.enc.Base64.parse(sessionKey);
var iv:any = CryptoJS.enc.Base64.parse(iv);
var decrypted = CryptoJS.AES.decrypt(encryptedData, key, {
iv: iv,
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7
});
var result = decrypted.toString(CryptoJS.enc.Utf8);
return JSON.parse(result);
}