Celestia 中文文档 下载 App

CELX 脚本进阶:函数、变量、循环

CELX vs CEL:一个关键区别

CEL 是纯"动作序列",CELX 是带 Lua 表达式的 CEL。CELX 文件可以用 Lua 写函数、变量、循环,然后调用 Celestia 的原生动作。

CELX 文件以 @cel 开头表示"这是 CELX 脚本"。

@cel
-- 这是一个 CELX 脚本示例
-- 依次访问太阳系九大天体

planets = {"Mercury", "Venus", "Earth", "Mars", "Jupiter", "Saturn", "Uranus", "Neptune"}

for i = 1, 8 do
    Select { object planets[i] }
    Goto { Duration 5 }
    Wait { Duration 2 }
end

Print { "太阳系大环游完成!" }

CELX 新能力

变量和函数

@cel

-- 定义函数
function fly_to(name, duration)
    Select { object name }
    Goto { Duration duration }
    Wait { Duration 1 }
end

-- 调用
fly_to("Mars", 3)
fly_to("Jupiter", 5)
fly_to("Saturn", 7)

条件判断

@cel

Select { object "Betelgeuse" }
-- 如果参宿四未来爆炸了,就改看新的超新星
if explosion_detected then
    Select { object "SN_2025xx" }
end

时间计算

@cel

-- 跳到未来 100 年
celestia:setSimulationTime(celestia:getSimulationTime() + 100 * 365.25)

关键帧动画

CELX 支持多相机帧——让 Celestia 在预设的多个相机位置之间平滑过渡:

@cel

-- 定义第一帧:地球
celestia:goto("Earth", 3.0)
celestia:wait(2.0)

-- 定义第二帧:土星
celestia:goto("Saturn", 5.0)
celestia:wait(3.0)

-- 定义第三帧:仙女座大星系
celestia:goto("M31", 10.0)

运行后就是一段从地球 → 土星 → 仙女座的自动漫游。

运行 CELX

和 CEL 一样——命令行 celestia --url myscript.celx,或 Celestia 内 Ctrl+E 打开编辑器选择。

调试 CELX

CELX 比 CEL 好的一点:如果脚本有语法错误,Celestia 会在控制台打印错误消息和行号。打开 Celestia 窗口的控制台(Ctrl+Shift+C)就能看到报错。