[LayaAir3] 3.3.2 Sprite3D对象设置坐标失效

回复

BUG反馈Recovery 发起了问题 • 1 人关注 • 0 个回复 • 829 次浏览 • 2025-09-30 18:27 • 来自相关话题

[LayaAirIDE3] xcode切入切出声音不播放

回复

LayaAir IDEgaden 发起了问题 • 1 人关注 • 0 个回复 • 901 次浏览 • 2025-09-30 09:43 • 来自相关话题

[LayaAir3] 新版本3.3.2自动图集能否在本地调试关闭掉,也有BUG

回复

LayaAir引擎2DFany 发起了问题 • 1 人关注 • 0 个回复 • 928 次浏览 • 2025-09-30 09:43 • 来自相关话题

layanative打包的android项目顺序加载js文件,可能有些js加载后未执行的问题

LayaAir Native打包哎呀嘛N号 发表了文章 • 0 个评论 • 917 次浏览 • 2025-09-30 09:43 • 来自相关话题

layanative发布的android项目,如果代码做了大量分包(比如各个功能模块-如:背包、技能,按需加载),在一次性加载大量js文件时,会出现某一些模块js代码加载完成后,未通过window.evalJS("加载的js文件中内容")执行的问题,导致这些功能模块出现问题
 
原因:
android项目中apploader.js文件,对js加载有个顺序处理方案,具体代码在Document.uploadScript中

uploadScript(d) {
var _t = this;
d.i = this._loading;
this._loading++;
if (d.src) {
console.log("_downloadAysn:temp.src" + d.src);
window.downloadfile(d.src, false, function (data) {
d._stext = data + "\n//@ sourceURL=" + d.src;
_t._downloadOk(d);
}, function () {
var e = new Event("error");
e.target = e.currentTarget = d.obj;
d.obj.onerror && d.obj.onerror(e);
});
}
else {
d._stext = d.text;
_t._downloadOk(d);
}
}
 
_downloadOk(d) {
this.scriptTextList[d.i] = d;
for (var i = this._evalNum, len = this.scriptTextList.length; i < len; i++) {
var t = this.scriptTextList[i];
if (!t)
return;
console.log(">>>>>>>>>>>>>>>eval src=" + t.src);
var t1 = Date.now();
window.document["currentScript"] = t.src;
window.evalJS(t._stext);
console.log(">>>>>>>>>>>>>>>>>eval take time:" + (Date.now() - t1));
var e = new Event("load");
e.target = e.currentTarget = t.obj;
t.obj.onload && t.obj.onload(e);
this._evalNum++;
}
if (this._loading == this._evalNum) {
this._loading = this._evalNum = 0;
this.scriptTextList.length = 0;
}
}

上面这段代码中,会有一个问题,如果window.downloadfile触发了下载失败的话,就会导致下载失败的那个文件始终在列表 scriptTextList中是空的,比如:下载0、 1、2、3、4、5这几个js文件,如果1下载失败,那么即使2、3、4、5全部加载完毕,回调_downloadOk方法时,_evalNum始终都是从1开始,在for循环中,scriptTextList[1] 始终都是null,这就导致2、3、4、5这几个js文件即使加载完成了,也无法执行 window.evalJS(js文件内容)。
 
处理方式:
在确保有这些js文件的前提下,把下载方法单独提出来,加载失败后,每隔500毫秒继续加载,直至加载完成

uploadScript(d) {
var _t = this;
d.i = this._loading;
this._loading++;
this._downLoadFile(d, _t);
}
_downLoadFile(d, _t) {
if (d.src) {
console.log("_downloadAysn:temp.src" + d.src + ", id:" + d.i);
window.downloadfile(d.src, false, function (data) {
d._stext = data + "\n//@ sourceURL=" + d.src;
_t._downloadOk(d);
}, function () {
var e = new Event("error");
e.target = e.currentTarget = d.obj;
d.obj.onerror && d.obj.onerror(e);
setTimeout(_t._downLoadFile, 500, d, _t);
});
}
else {
d._stext = d.text;
_t._downloadOk(d);
}
}
_downloadOk(d) {
this.scriptTextList[d.i] = d;
for (var i = this._evalNum, len = this.scriptTextList.length; i < len; i++) {
var t = this.scriptTextList[i];
if (!t)
return;
console.log(">>>>>>>>>>>>>>>eval src=" + t.src);
var t1 = Date.now();
window.document["currentScript"] = t.src;
window.evalJS(t._stext);
console.log(">>>>>>>>>>>>>>>>>eval take time:" + (Date.now() - t1));
var e = new Event("load");
e.target = e.currentTarget = t.obj;
t.obj.onload && t.obj.onload(e);
this._evalNum++;
}

 
按照上面这种改法,能确保所有js都正常加载,亲测有效 查看全部
layanative发布的android项目,如果代码做了大量分包(比如各个功能模块-如:背包、技能,按需加载),在一次性加载大量js文件时,会出现某一些模块js代码加载完成后,未通过window.evalJS("加载的js文件中内容")执行的问题,导致这些功能模块出现问题
 
原因:
android项目中apploader.js文件,对js加载有个顺序处理方案,具体代码在Document.uploadScript中


uploadScript(d) {
var _t = this;
d.i = this._loading;
this._loading++;
if (d.src) {
console.log("_downloadAysn:temp.src" + d.src);
window.downloadfile(d.src, false, function (data) {
d._stext = data + "\n//@ sourceURL=" + d.src;
_t._downloadOk(d);
}, function () {
var e = new Event("error");
e.target = e.currentTarget = d.obj;
d.obj.onerror && d.obj.onerror(e);
});
}
else {
d._stext = d.text;
_t._downloadOk(d);
}
}
 
_downloadOk(d) {
this.scriptTextList[d.i] = d;
for (var i = this._evalNum, len = this.scriptTextList.length; i < len; i++) {
var t = this.scriptTextList[i];
if (!t)
return;
console.log(">>>>>>>>>>>>>>>eval src=" + t.src);
var t1 = Date.now();
window.document["currentScript"] = t.src;
window.evalJS(t._stext);
console.log(">>>>>>>>>>>>>>>>>eval take time:" + (Date.now() - t1));
var e = new Event("load");
e.target = e.currentTarget = t.obj;
t.obj.onload && t.obj.onload(e);
this._evalNum++;
}
if (this._loading == this._evalNum) {
this._loading = this._evalNum = 0;
this.scriptTextList.length = 0;
}
}


上面这段代码中,会有一个问题,如果window.downloadfile触发了下载失败的话,就会导致下载失败的那个文件始终在列表 scriptTextList中是空的,比如:下载0、 1、2、3、4、5这几个js文件,如果1下载失败,那么即使2、3、4、5全部加载完毕,回调_downloadOk方法时,_evalNum始终都是从1开始,在for循环中,scriptTextList[1] 始终都是null,这就导致2、3、4、5这几个js文件即使加载完成了,也无法执行 window.evalJS(js文件内容)。
 
处理方式:
在确保有这些js文件的前提下,把下载方法单独提出来,加载失败后,每隔500毫秒继续加载,直至加载完成


uploadScript(d) {
var _t = this;
d.i = this._loading;
this._loading++;
this._downLoadFile(d, _t);
}
_downLoadFile(d, _t) {
if (d.src) {
console.log("_downloadAysn:temp.src" + d.src + ", id:" + d.i);
window.downloadfile(d.src, false, function (data) {
d._stext = data + "\n//@ sourceURL=" + d.src;
_t._downloadOk(d);
}, function () {
var e = new Event("error");
e.target = e.currentTarget = d.obj;
d.obj.onerror && d.obj.onerror(e);
setTimeout(_t._downLoadFile, 500, d, _t);
});
}
else {
d._stext = d.text;
_t._downloadOk(d);
}
}
_downloadOk(d) {
this.scriptTextList[d.i] = d;
for (var i = this._evalNum, len = this.scriptTextList.length; i < len; i++) {
var t = this.scriptTextList[i];
if (!t)
return;
console.log(">>>>>>>>>>>>>>>eval src=" + t.src);
var t1 = Date.now();
window.document["currentScript"] = t.src;
window.evalJS(t._stext);
console.log(">>>>>>>>>>>>>>>>>eval take time:" + (Date.now() - t1));
var e = new Event("load");
e.target = e.currentTarget = t.obj;
t.obj.onload && t.obj.onload(e);
this._evalNum++;
}


 
按照上面这种改法,能确保所有js都正常加载,亲测有效

[LayaAirIDE2] Laya2.13.8引擎版本接入淘宝小游戏在安卓没声音

回复

BUG反馈1661411363用户 发起了问题 • 1 人关注 • 0 个回复 • 1183 次浏览 • 2025-09-29 11:25 • 来自相关话题

[LayaAirIDE3] skel骨骼动画播放失败,编辑器预览没问题

回复

BUG反馈7f454c46 发起了问题 • 1 人关注 • 0 个回复 • 554 次浏览 • 2025-09-28 09:42 • 来自相关话题

[LayaAir3] 3.3 rt透明渲染叠加异常

回复

BUG反馈Recovery 发起了问题 • 1 人关注 • 0 个回复 • 1142 次浏览 • 2025-09-25 17:22 • 来自相关话题

[LayaAir3] 图片遮罩出现背景3.2.8升级之后

回复

LayaAir IDE1754891146用户 发起了问题 • 1 人关注 • 0 个回复 • 1120 次浏览 • 2025-09-25 14:31 • 来自相关话题

[LayaAirIDE3] laya3 透明默认无法合批 强制开启后 越来越卡

回复

LayaAir引擎3D小强 发起了问题 • 1 人关注 • 0 个回复 • 1067 次浏览 • 2025-09-25 12:10 • 来自相关话题

[LayaNative3] 3.2.8发布android项目不断切换清理资源后native内存一直涨

回复

LayaAir Native打包哎呀嘛N号 发起了问题 • 1 人关注 • 0 个回复 • 1307 次浏览 • 2025-09-24 15:47 • 来自相关话题

[LayaAir3] 3d材质属性动画过渡报错

回复

BUG反馈Heured 发起了问题 • 1 人关注 • 0 个回复 • 770 次浏览 • 2025-09-22 21:38 • 来自相关话题

[LayaAir3] 武汉项目外包,低版本的Laya H5项目重构、功能升级吗,个人优先

回复

求职与招聘1654091325用户 发起了问题 • 1 人关注 • 0 个回复 • 277 次浏览 • 2025-09-22 15:40 • 来自相关话题

[LayaAir3] 3.3 材质球赋予不存在shader导致渲染异常

回复

BUG反馈Recovery 发起了问题 • 1 人关注 • 0 个回复 • 1314 次浏览 • 2025-09-17 14:58 • 来自相关话题

[LayaAir3] Laya3.3在oppo小游戏上有大量报错Cannot read property '_globalRepaintSet' of undefined

回复

OPPO小游戏专区1617866298用户 发起了问题 • 1 人关注 • 0 个回复 • 328 次浏览 • 2025-09-15 14:07 • 来自相关话题

[LayaAirIDE3] 讨论:抖音IOS内存很高

回复

字节跳动小游戏 发起了问题 • 1 人关注 • 0 个回复 • 905 次浏览 • 2025-09-12 09:31 • 来自相关话题

Web 3D 编辑器外包需求

回复

技术分享张佳宁 发起了问题 • 1 人关注 • 0 个回复 • 922 次浏览 • 2025-09-10 09:37 • 来自相关话题

[LayaAir3] LAYAAIR 3.3 和 LAYANATIVE 的VIDEO 支持 M3U8文件吗?

回复

LayaAir IDE1651749883用户 发起了问题 • 1 人关注 • 0 个回复 • 720 次浏览 • 2025-09-08 01:54 • 来自相关话题

[LayaAir3] laya3 可以发布增加es6 转ES5吗

回复

其它综合交流卡卡西 发起了问题 • 1 人关注 • 0 个回复 • 729 次浏览 • 2025-09-08 01:54 • 来自相关话题

[LayaAir3] 小游戏平台首次启动白屏及掉帧问题

回复

其它综合交流wjs 发起了问题 • 1 人关注 • 0 个回复 • 752 次浏览 • 2025-09-07 20:03 • 来自相关话题

[LayaAirIDE2] 富文本:HtmlDivElement是否支持垂直居中?

回复

LayaAir IDE吃番茄还是西红柿 发起了问题 • 1 人关注 • 0 个回复 • 1051 次浏览 • 2025-09-06 14:35 • 来自相关话题

商务合作
商务合作