[LayaAirIDE 2.0]自定义场景继承导出,会在自定义类中加入Laya.前缀导致layaMaxUI文件报错

ui工程,一个普通场景A,继承基类场景Base,导出场景后,layaMaxUI.ts,会报Base找不到,找不到的原因,工程默认生成给Base加了Laya.前缀。
 
layaMaxUI.ts代码如下
 
export gm {
    export class GmPanelUI extends Laya.Base {
        public bg:Laya.Sprite;
        public input:Laya.TextInput;
        public btnSend:Laya.Button;
        public btnClose:Laya.Button;
        constructor(){ super()}
        createChildren():void {
            super.createChildren();
            this.createView(GmPanelUI.uiView);
        }
    }
}
 
2.0之前版本,是不会把Laya.前缀加上,请问这个问题,如何解决?

Aar0n

赞同来自:

这个没有什么问题,您具体遇到的问题 发个demo 看看,

ycc2004

赞同来自:

你好,demo已上传,工程里有一个readme的情况说明。

CloudD

赞同来自:

请问这个问题解决了吗?

Another

赞同来自:

我也遇到这个问题了.求解

康伟

赞同来自:

请问这个问题解决了吗?

Aar0n

赞同来自:

现在新版引擎不会有这个问题了 

gamedaybyday2

赞同来自:

我用的2.1.1.1,还是有这个问题哎。

136*****740

赞同来自:

compile.js 添加如下代码
 
// 如果是发布时调用编译功能,增加prevTasks
let prevTasks = "";
if (global.publish) {
    prevTasks = ["loadConfig","替换Laya前缀"];
}else{
    prevTasks = ["替换Laya前缀"]

const fs = require("fs"); 
function readFile(path) {
    if (fs.existsSync(path)) {
        return fs.readFileSync(path, "utf-8");
    }
    return null;
}
gulp.task('替换Laya前缀', function(){
    
    var layaMaxUI_Path = workSpaceDir + "/src/ui/layaMaxUI.ts"
    let fileContent = readFile(layaMaxUI_Path);
    console.log("读取文件",fileContent)
    if (fileContent ) {
            fileContent = fileContent.replace(/Laya\.UICodeView/g,"UICodeView");
            fs.writeFileSync(layaMaxUI_Path, fileContent, 'utf-8');
        }
    }
);

石圣

赞同来自:

这个bug到目前为止官方一直没修复,尽管论坛上官方人员回复说已经修复了。
由于今天心情比较好,所以就去研究了一下解决方案,刚好发现了这个小bug所在,哈哈,具体方法如下:

1.找到Laya安装目录下的layabuilder.max.js这个文件。
如果是mac系统,目录可以参考下面,记得将版本号改为自己使用的版本!
/Applications/LayaAirIDE_beta.app/Contents/Resources/app/out/vs/layaEditor/h5/layabuilder.max.js
用windows的同学请自行找目录哈。

2.找到下面代码,具体行号不同版本可能不一样,仅供参考
    24522                         if(this.projectSetting.codeType==1){
    24523                                 classObj["classType"]="Laya." + baseName;
    24524                         }

3.修改为下面样子,其实就是去掉了"Laya."这个前缀
    24522                         if(this.projectSetting.codeType==1){
    24523                                 classObj["classType"]= baseName;
    24524                         }

4.重启LayaIDE,导出就发现666了。大多数同学的问题到这里就解决完毕了。有好奇心的同学可以继续看看下一步~

5.注意这里会将所有的"Laya."前缀都去掉,大家可以根据自己需要做判断。也可以在F9设置里把需要Laya前缀的类加到“Code导入类”里面来解决这个问题。

要回复问题请先

商务合作
商务合作