码哥驾到

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 948|回复: 0

Laya Note 常见Bug及解决方法,Laya常用API, 资源加载,getChildAt()...

[复制链接]

185

主题

217

帖子

1016

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1016

最佳新人活跃会员热心会员推广达人宣传达人灌水之王突出贡献优秀版主荣誉管理论坛元老

发表于 2022-2-24 23:51:37 | 显示全部楼层 |阅读模式
//****************************************** 1)搭建Http服务器 ******************************************//

$ npm i -g http-server
$ http-server ./
TypeError: Laya.Templet is not a constructor
laya.core.js:17243 TypeError: Laya.Templet is not a constructor
【错误原因】:项目少了一个laya.ani.js类库导致,进入编辑模式,按快捷键F9进入项目设置,选择类库设置,将laya.ani.js勾选即可。
【解决方案】按F9 勾选类库 laya.ani.js


//********************************************** getChildAt()有Bug,用this._children[0].visible = false替代 ************************//
this.scene.bg._children[0].visible = false;

//********************************************** getUint16 error - Out of bounds *********************************************************//
Uncaught getUint16 error - Out of bounds
laya.core.js:18126 Uncaught getUint16 error - Out of bounds
【错误原因】:龙骨动画太长还是无用数据太多
【解决方案】:1) 把所有动画 只保留0到1帧
2) 如果是龙骨动画,就在后面加上 Laya.loader.load(“ani/jingbubeipi.sk”,Handler.create(this,asd),null,Loader.BUFFER); Loader.BUFFER 相当于预加载,在预加载动画时这样在后面参数加上loader.buffer;

//********************************************** Laya.loader.getRes() undefined *********************************************************//
Laya.loader.getRes() undefined
【错误原因】:Laya.loader.getRes() 获取的资源必须先预加载
【解决方案】:使用Laya.loader.load(“ani/jingbubeipi.sk”,Handler.create(this,asd),null,Loader.BUFFER); Loader.BUFFER 相当于预加载
在预加载动画时这样在后面参数加上loader.buffer;

//********************************************** 资源预加载 *************************************************************************//
const res = [
{url : “image/start/bg-loading.jpg”, type : Laya.Loader.IMAGE},
{url : “image/start/beat.png”, type : Laya.Loader.IMAGE},
{url : “image/start/progress_preload.png”, type : Laya.Loader.IMAGE},
{url : “image/start/progress_preload$bar.png”, type : Laya.Loader.IMAGE},
{url : “skeleton/loadsk.png”, type : Laya.Loader.IMAGE},
{url : “skeleton/loadsk.sk”, type : Laya.Loader.BUFFER},
{url : “image/start/txt-notice.png”, type : Laya.Loader.IMAGE},
{url : “sound/bgm.mp3”, type : Laya.Loader.SOUND}
];
Laya.loader.load(res, Laya.Handler.create(this, this.init));
laya.debugtool.js
var Browser=laya.utils.Browser;//
laya.debugtool.js:5 Uncaught ReferenceError: laya is not defined
Uncaught Can not find class laya.html.dom.HTMLDivElement
laya.core.js:20878 Uncaught Can not find class laya.html.dom.HTMLDivElement
image.png
编辑模式下使用【F9】项目设置中类库设置,选中laya.html.js后确认引入类库。接着使用【F8】编译项目,编译成功后查看/bin/index.js文件中是否已经添加了laya.html.js。

经过上述操作后,laya.html.dom.HTMLDivElement错误仍然存在。

TypeScript 实现日志

export default class Log{undefined
constructor(){}
public static trace(…args:any[]){undefined
console.log.apply(console, args);
}
}

//************************************************* 《《《《 Laya 》》》》**************************************************//
1)如果在 继承自 UI.xxxUI的场景的脚本中 使用Laya.timer.once 和Laya.stage. 等都无效 要换成 this.timer.once 和this.stage.等
2) 示例里面的代码 复制下来后不管用的话 就加上 Laya. 如果报错 “Laya”仅指类型,但在此用作命名空间。 就把var t:
Laya.Texture的Laya.Texture 删除掉,手打一个 Texture 就好了
3)如果获取不到子物体 就用 _childRen[0]等等获取
4)【节点的宽高一定要设置】 如果代码修改个某个节点的位置,大小没有效果,就是编辑器里面没有设置 节点的宽高 ,这个宽高必须要设置,要不然代码不会有效果 ,这样的话,设置为多少运行后节点都不会改变大小,改变位置的时候也可以 用锚点anchorX ,anchorY做更改 siki学院2D赛车有过填坑,自己部落战争也有过填坑
5)

Laya
新建脚本只能放到src子文件夹下,不能放到根目录下(放到根目录下是需要在GameConfig.ts里面注册的(例如 reg(“LoadingCircle.ts”,LoadingCircle) )),新建模板脚本只有2.30之前有,

如果在Ts中写代码 没效果 1)打开的修改代码的代码编辑器不是对象的项目的。2)编译出错,ts没有编辑到bundle.js中

//***************************unity 发布Laya的3D场景 .ls *******************************************//
Export tool 就是发布视图,
报错【Uncaught Error: MeshReader: unknown mesh version】Unity发布3D的Laya场景 .ls 对应的Laya版本,使用对应的LayaUnityplug插件,不然会报错【Uncaught Error: MeshReader: unknown mesh version】
把unity场景的材质都换成 LayaAir3D->Mesh里面和unity对应材质的材质,比如Unity的standard材质 对应LayaAir3D的Mesh的PBR(standard)

报错11111 【 clas not a constructor】 自动生成的laya.core.js有问题,删除并换了一个正常的,就能运行正常了
报错22222) 【 Cannot find module ‘gulp’】
报错33333) 【Cannot read property ‘regClass’ of undefined 】 类库问题 可能是 d3 physical3D UI 等类库 或者直接把好的lib文件夹换上

11) 如果 报错 gulp 这表示发布构建的 工具链有问题, 考虑提升版本,

//************************************************* Laya is not defined *************************************************//
报错 laya.wxmini.js undefuned

报错:Uncaught ReferenceError: Laya is not defined
解决:在game.js 的第一行即require的最开始的位置,再添加一个require(“libs/laya.core.js”); 如果bin的里面没有game.js 就加入到发布后的微信包"undefined"!=typeof wx判断里面的game.js里面
勾选 再文件-项目-发布旧版 里面 勾选 【【】是否只复制index.html内引用的js文件】 在game.js 再添加一个require(“libs/laya.core.js”);
//******************************* Class constructor Da cannot be invoked without ‘new’ at new N *****************************************//
2)报错:Uncaught TypeError: Class constructor Da cannot be invoked without ‘new’ at new N (bundle.js? [sm]:1)
解决: 检查下你项目是不是既有Es5的js, 又有es6的js 不要使用Es6 转 Es5

3)报错 Cannot find module ‘./libs/fairygui/rawinflate.min.js’ 解:Laya类库还是外部类库 都不能放到其他文件家里,也不能放libs的子文件夹,只能放到libs这个根目录。在index.js引用 loadLib(“libs/rawinflate.js”)
解决

//************************************************* Laya is not defined *************************************************//
4) 发布微信包报错时 Laya is not defined 也不要去加 Laya.core.js 和 window.Parser = require("./xmljs/dom_parser"); 只需要把replaceWx里面的game.js换到 replace wxgame的game.js就行了

5)scriptEngine 0xc30edooo loadScriptStringWithCodeCache failed 发布QQ包报错 安卓的QQ扫码时运行不出来 报错 解决: 把qq开发者工具-详情里面的 【Es6转 Es5】选项 取消勾选 就可以了

6) Laya 微信包转 360包的时候 发布时候不要压缩 360没有包体大小限制,压缩的话,game.js代码等没有换行了和空格 【1_ _ _ 按Creator微信包转360的步骤把(1)在包里加入qhgame-adapter.js360类库文件 (2)game.js的微信库require(‘weapp-adapter’)换成360库require(‘qhgame-adapter’); (3)game.json 中替换相应的适配文件 】 【2_ _ _ Laya发布的包名为wxgame 一定要改为 Creator微信包名的模式 wechatgame】

位移塑造 暂时能发布 tt qq weixin 发布微信 记得修改 【把replaceWx里面的game.js换到 replace wxgame的game.js就行了】 【把远程链接换成公司的】

//************************************************* SaxO is not defined *************************************************//
7) 灌篮进阶版 laya2.3.0 tt ttJSBridge not defined!
(1) 去掉 game.json 里面的 “openDataContext”:"./openData" 开放数据域
(2) (可能是发布微信版本,还没加入进去游戏之前就加载了开放数据域名), 【发布成qq版本,libs里加入laya.wxmini.js类库。然后game.js引入这个类库替换掉laya.qqmini.js里,把相应的有报错的类库适当的 去掉或修改,比如Cannot read property ‘_wgColor’ of null,(_wgColor在类库laya.core.js里面)去掉require(“libs/laya.core.js”);ReferenceError: SaxO is not defined(SaxO 在类库domparserinone.js里面)去掉require(“libs/domparserinone.js”);】

8) (1)Laya的ts 聚合 不能写到 main.ts里面,不能写道 return 后面 最好写道一个SDKManager.ts类里面 【可能是Laya. 的namespace 值作用于Laya内部脚本文件审试试(相同根目录文件夹下) 找不到可能是
报错 Laya.AdThird.AdThirdPartUtils.showBannerAd() 可能是此脚本上 有 Laya的引用 import { Laya } from “Laya”,与 Laya.AdThird冲突 可以改成Ly.AdThird.AdThirdPartUtils.showBannerAd();就好了】
(2)或者不是 module export class AdThirdPartUtils {} 在Laya.ts中加上import {AdThirdPartUtils } from “…/src/mgr/AdThirdPartUtils” static AdThird:AdThirdPartUtils = new AdThirdPartUtils();

9)
//************************* game loadScript error: Error: Error: Error: ENOENT: no such file or directory ***************************//

10)
//******************************************************** 需要引入xml解析库文件 *************************************************************//
在game.js里面 加上 window.Parser = require("./xmljs/dom_parser"); // 不影响运行,忽略掉,或者去掉引入这个类库 dom

10_1) Es6 转 Es5 就能解决
//******************************************************** QQ报错 ReferenceError: Zlib is not defined proto.decompressPackage (fairygui.js? [sm]:7703) *******//
new Zlib.RawInflate(buf);data=inflater.decompress(); 在类库中加入 ReferenceError: Zlib is not defined 是因为没有加入libs类库文件夹没有加入类库(rawinflate.min.js), 或者game.js没有引用require(“libs/rawinflate.min.js”); 或者 index.js里面没有加入 loadLib(“libs/rawinflate.min.js”);

10_2) QQ渠道 Zlib is not defined Zlib.RawInflate(buf);data=inflater.decompress(); 引入之后要把 Es6转Es5 取消勾选,才能正常运行
导入fairygui库(坑点)
将bin目录下文件保存到 项目根目录/libs/fairygui/目录下 //原文 https://blog.csdn.net/u011004567/article/details/76039762
将libs目录下文件保存到 项目根目录/libs/rawinflate/目录下
注意如果rawinflate 目录下没有rawinflate.js,则复制rawinflate.min.js保存为rawinflate.js
(egret在本地调试调用的是.js文件,如果不存在则会报错,未找到Zlib库)

11)
//***************************** 头条手机测试 thirdScriptError Can’t find variable:window /libs/laya.core.js ***************************************//

要把 game.js里面 weapp_adapter.js 放在第一的位置就能解决了这个问题 (有人说是laya.wxmini.js)里面的 去掉var window = window || global; 或者 var document = document || (window.document = {}); 加在代码最前面试试
if ((typeof swan !== ‘undefined’) && (typeof swanGlobal !== ‘undefined’)) {undefined
require(“swan-game-adapter.js”);

//**************************************************** 标准类库 game.js ****************************************************//
//bin的game.js常用//
require(“weapp-adapter.js”);
//require("./code.js");
window.Parser = require("./xmljs/dom_parser");

//*************************************** bin的game.js 不常用 ****************************************//
if ((typeof swan !== ‘undefined’) && (typeof swanGlobal !== ‘undefined’)) {undefined
require(“swan-game-adapter.js”);
require(“libs/laya.bdmini.js”);
} else if (typeof wx!==“undefined”) {undefined
require(“libs/laya.core.js”);
require(“weapp-adapter.js”);
require(“libs/laya.wxmini.js”);
}
window.Parser = require("./xmljs/dom_parser.js"); //
window.loadLib = require;
require(“index.js”);

//*********************************************** 标准库 index.js **************************************************************//
//***********************bin的 index.js的常用 ************************************//
/

设置LayaNative屏幕方向,可设置以下值
landscape 横屏
portrait 竖屏
sensor_landscape 横屏(双方向)
sensor_portrait 竖屏(双方向)
*/
window.screenOrientation = “sensor_landscape”;
//-----libs-begin-----
loadLib(“libs/laya.core.js”);
loadLib(“libs/laya.wxmini.js”);
loadLib(“libs/laya.webgl.js”);
loadLib(“libs/laya.ani.js”);
// loadLib(“libs/laya.filter.js”);
loadLib(“libs/laya.html.js”);
// loadLib(“libs/laya.tiledmap.js”);
loadLib(“libs/laya.d3.js”);
loadLib(“libs/rawinflate.min.js”);
loadLib(“libs/fairygui.js”);
//-----libs-end-------
loadLib(“js/bundle.js”);

//****************************************************** Laya 发布 360 步骤 ***************************************//
5:如何打包运行

直接打成微信包就可以了

打完包后,在微信包里找到game.json,并且添加一下代码
{undefined
“deviceOrientation”:“portrait”,
“showStatusBar”:false,
“networkTimeout”:
{undefined
“request”:5000,
“connectSocket”:5000,
“uploadFile”:5000,
“downloadFile”:5000

},
“sdkversion”: “1.0.0”,
“window”: {undefined
“enableLargeWindow”: false,
“showRefreshButton”: false,
“windowWidth”: 640,
“windowHeight”: 1136,
“enableResize”: false,
“autoScale”:true
}
}

在微信项包中添加一个
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|码哥驾到 ( 京ICP备15044914号-1 )

GMT+8, 2022-5-25 10:50 , Processed in 0.046875 second(s), 22 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表