- 预期表现
微信开发者工具的表现符合预期:蓝色图片铺满屏幕,木板图片覆盖蓝色图片的部分区域
- 当前 Bug 的表现(附上截图)
手机上是这样的。。。
运行我提供的代码,先出现全屏的蓝色图片,2秒后,蓝色图片不见了。。。只出现木板图片。
- 提供一个最简复现 Demo
GameGlobal.systemInfo = wx.getSystemInfoSync();
let canvas = wx.createCanvas();
let context = canvas.getContext('2d');
let bgImage = wx.createImage();
bgImage.src = 'images/sea.jpg';
bgImage.onload = function () {
context.drawImage(bgImage, 0, 0, systemInfo.screenWidth, systemInfo.screenHeight);
setTimeout(function()
{
let battleImage = wx.createImage();
battleImage.src ='images/wood.jpg';
battleImage.onload = function()
{
context.drawImage(battleImage , 50,50,
systemInfo.screenWidth * 0.2 , systemInfo.screenHeight * 0.2
);
};
},2000);};
- 复现路径
新建目录test。
新建目录test/images。
test/images放入jpg格式的图片,更名为sea.jpg、wood.jpg。图片大小 < 200kB。
新建test/game.js, 放入以上js代码。新建test/game.json, 写入:
{
"deviceOrientation": "portrait"
}打开微信开发者工具,点击“编译”,运行test项目。
微信开发者工具,点击“预览”,手机打开安卓(Android 7)版微信7.0.0,扫描二维码进行预览。
经过探索后,发现:问题变成了无法指定多张有重叠的图片的覆盖顺序,详见我的评论。

我也是这个问题, 小程序真是垃圾啊
promise.all()为啥在真机里不行呢?
请问,这个问题您现在解决了么,请问怎么解决的
运用 Promise.all 完美解决问题,示例代码如下:
varimgPool = [{"id":"ByeD9rlryj0z69h9XWE4oiRa","index": 0,"imgSrc":"images/home/Home_bg.png","x": 0,"y": 0,"width": 320,"height": 568},{"id":"fM0BsD5g3f6IyM71ZYqwfEFX","index": 1,"imgSrc":"images/home/Home_setting.png","x": 13.235,"y": 20.535999999999998,"width": 55.3,"height": 54.599999999999994},{"id":"EE4YMeHyyOslDFnaKYfmXO5f","index": 2,"imgSrc":"images/home/Home_btn1.png","x": 78.4,"y": 328.23,"width": 163.2,"height": 47}]// canvas 上下文varctx = canvas.getContext('2d')varpromise_list = []imgPool.forEach((item) => {// 将加载好的图片加入Promise中promise_list.push(newPromise((resolve, reject) => {item.img =newImage()item.img.src = item.imgSrcitem.img.onload =function() {resolve(item)}item.img.click =function(e) {console.log(e)}}))})// 详见 http://es6.ruanyifeng.com/#docs/promise#Promise-allPromise.all(promise_list).then(function(results) {results.forEach((item) => {ctx.drawImage(item.img,item.x,item.y,item.width,item.height)})}).catch(function(reason) {console.log(reason)});这样写,倒是可以显示2张图片:(sea.jpg 92kb, wood.jpg 75kb)
无重叠的话,手机上的表现实符合预期的。
关键点:不要在image.onload里边嵌套image2.onload。
开发者工具的表现符合预期:
重叠部分,木板盖住泳池。然而,手机上的表现却是:
即使木板图片延迟drawImage,也还是这样。