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)就能看到报错。