通常一行代码出错后 整个lua代码逻辑 都会被终止了。所以要找到是在哪一行代码终止的
ts import 编译后为lua require。 ts中的静态初始化代码会被执行。比如有一个静态属性 static g =CreateGroup() 那么这个CreateGroup 会在import/require引用时就会调用 尽量把初始化写到方法里 如果直接在静态值上使用方法赋值在使用时就要小心一点了 注意依赖顺序
通常是由于App.ts 的import 的其他TS文件中的静态属性调用了_G全局的jass初始化函数引起的 () 或互相require依赖死循环
import GlobalVars from "./solar/common/GlobalVars";
GlobalVars.init()
import BaseUtil from "./solar/util/BaseUtil";
BaseUtil.init()
将得到lua
local ____GlobalVars = require("solar.common.GlobalVars")
local GlobalVars = ____GlobalVars.default
local ____BaseUtil = require("solar.util.BaseUtil")
local BaseUtil = ____BaseUtil.default
GlobalVars:init()
BaseUtil.init()
这意味着 如果require BaseUtil 时需要访问GlobalVars:init() 后的数据的话就会出错。 因为ts的顺序看上去是GlobalVars:init() 在前面 但实际编译后是所有require 在最前 然后才是代码块
print 如果是官方we可能会占用了这个函数 导致无法输出报错信息 (控制台标题看是福柏级YDWE,还是War3Plugin)
print打印不出来是因为游戏根目录有2个.dll文件要删掉,一个叫version.dll ,一个叫dz_we_plugin.dll
不要用this.属性去引用static的类属性 应该通过类名.属性引用
require 的无self方法可以将变量声明为NoSelf类型。这样在调用变量方法时 Lua会以.调用 而不是:调用 如:
const CJ:NoSelf = require('jass.common')