载入中...
搜索中...
未找到
API 使用约定

API 使用约定

模块和辅助对象

EVEngine 把脚本 API 放在全局 eve 表中。eve.Physics()eve.Audio() 这类构造器返回模块对象;模块再创建 WorldBodySource 等辅助对象。模块手册的“API 快查”同时列出模块和辅助对象方法,调用时必须先从相应工厂取得对象。

local physics = eve.Physics(); // 模块
local world = physics.newWorld(0, 980, true); // World
local body = world.newBody("dynamic", 0, 0); // Body

load.nut 已为常用模块创建 gfxwindowkeyboardmouseeventtimermapparticlesphysicsui 等全局实例。手动构造模块适用于独立脚本和需要明确依赖的代码。

API 的可信边界

脚本能调用的方法以各模块 expose(...) 中的 addFuncaddVar 和脚本注入类为准,而不是以 C++ 头文件中的所有 public 方法为准。例如 Image 的部分 C++ 解码方法当前没有暴露给 Squirrel。模块手册的 API 快查来自实际绑定;方法的参数顺序、默认值和返回类型可继续查看链接的头文件与测试。

生命周期和所有权

  • 将模块创建的世界、纹理、声音、发射器、场景宿主等对象保存在全局状态或实体组件中。
  • 不要在 eve_render() 中重复载入磁盘资源或创建长期对象。
  • update(dt) 使用秒为单位;物理模块对外使用像素坐标。
  • 输入和网络事件应在更新阶段消费,绘制调用放在渲染阶段。
  • 热重载会重新执行脚本顶层代码,使用 if (!("name" in getroottable())) 保护需要保留的引用。

错误处理

无效枚举字符串、越界索引、空对象或后端未初始化通常会抛出 Squirrel 异常。开发阶段应让异常直接暴露;对可恢复的资源加载可以使用 Squirrel 的 try / catch

try {
level <- map.newLayerFromFile("maps/level.json");
} catch (e) {
print("load level failed: " + e + "\n");
level <- map.newLayer(20, 12, 32, 32);
}