一开始我的项目用安卓手机web和iosweb和desktop web做测试,不知道是不是因为今天刚更了1.1.0的问题,安卓web会卡死而其他平台的不会,排查后发现是tilemap的问题,为了让问题更简洁明了,我建了个测试工程,里面什么都没有,就几段有问题的代码而已。
这图是这个测试工程所有的东西和代码:
这个是工程图:
这个是3个平台的溢出log(只有安卓的溢出,其他俩正常):
这个问题查了好久。。。
一开始我的项目用安卓手机web和iosweb和desktop web做测试,不知道是不是因为今天刚更了1.1.0的问题,安卓web会卡死而其他平台的不会,排查后发现是tilemap的问题,为了让问题更简洁明了,我建了个测试工程,里面什么都没有,就几段有问题的代码而已。
这图是这个测试工程所有的东西和代码:
这个是工程图:
这个是3个平台的溢出log(只有安卓的溢出,其他俩正常):
这个问题查了好久。。。
显示似乎也有问题,在creator里,tilemap都是一片土黄色
请问你使用的 Creator 是否为 1.1 rc1 版本?在这个版本之前,是有可能 tilemap 显示异常。如果你是在 1.1 rc1 以及之后的版本中遇到此问题,麻烦你提供一下测试工程或者资源。我重现一下问题并尽快解决。谢谢反馈!
好吧…我刚刚仔细看了一下你截图中的代码。知道你的 log 数据怎么获取的了。我这边尝试一下看看能不能重现。
另外,请问一下,你的 android web 是在模拟器测试还是真机测试?
麻烦看一下当前的 Creator 版本。另外,自动更新之后是否有重启 Creator?
真机和模拟器都试过,真机出现了我怀疑是不是机型的问题我才用的模拟器,海马的模拟器,这个很好重现的,唯一的代码test.js我已经贴出来了,挂在havetile节点上就行,havetile就是有80个tile的图层而已,for循环已经超过80次了因为溢出还继续循环
昨天那个工程我已经删了,再弄个吧,这个是工程:
TestProject.rar (123.9 KB)
我刚刚测试了一下,这个问题跟浏览器有关。发现在 搜狗浏览器能重现你遇到的问题。但是试了其他几个浏览器(Chrome,QQ浏览器,百度浏览器,UC浏览器,猎豹浏览器,遨游云浏览器)都没有遇到这个问题。
建议更换遍历数组的方式,使用这样的方式遍历:
for (var i = 0; i < tiles.length; i++) {
....
}
更进一步的测试发现,如果用 for (var i in arrayData) 进行遍历,而 arrayData 是一个 [] 数组的话,并没有问题(搜狗浏览器也没有问题)。
经过排查发现这个问题跟浏览器中 window.Uint32Array 类的实现有关。因为当 TiledLayer 数据格式为 base64(zlib) 时,TiledMap 解析逻辑中使用了 window.Uint32Array 对象来存储 tiles 数据。这时使用 for (var i in tiles) 的方式遍历就可能出现问题。
而使用 window.Uint32Array 比 [] 的性能会更高。所以还是建议更换遍历数组的方式。
版本的话就是6月1号发的1.1.0。我两台电脑试过都是这情况。新添加的tilemap显示没问题,但是保存重新启动Creator后又会变成这样。你们不妨打开范例的Puzzle场景看看。
又测试了一下,第一次打开这个场景就会这样,再双击一遍场景就显示正常了。
我在桌面版测是没有遇到问题。前面提到的测试结果是在 android 机器上测试的。
不管怎么样,你换遍历方式试试吧。我只能说用 for ... in ... 遍历 tiles 有风险。
恩,好的,遍历方法试了没问题了