跳转到内容

Celestia/Celx 脚本/CELX Lua 方法/CEL 命令锁定

来自维基教科书,开放的书籍,开放的世界

锁定 { }

此命令将两个对象锁定在一起。第一个选择的物体称为参考物体,第二个选择的物体称为目标物体。当它们作为一个对被锁定在一起时,当你旋转场景时,目标物体保持锁定到参考物体,并且显示的距离是两个物体之间的距离。

在锁定模式下,您的位置相对于参考物体和目标物体之间的线保持固定。当目标物体围绕参考物体移动(相对而言)时,您也会移动。因此,如果目标物体是太阳,则参考物体的照亮部分(它的“相位”)保持不变,因为您与太阳同步地围绕物体移动。

此命令没有参数。


CELX 等效-1

基于 observer:setframe() 方法。

  • 找到并选择名为<refstring> 的参考物体并存储在“objectname_ref”中。
objectname_ref = celestia:find( <refstring> )
celestia:select(objectname_ref)
  • 找到名为<tarstring> 的目标物体,该物体必须与“objectname_ref”锁定并存储在“objectname_tar”中。
objectname_tar = celestia:find( <tarstring> )
  • 将参考系的坐标系设置为与“objectname_tar”作为目标物体和“objectname_ref”作为参考物体锁定,并存储在“frame”中。
frame = celestia:newframe("lock", objectname_ref, objectname_tar)
  • 获取活动视图实例的观察者实例,并将参考系的坐标系设置为“frame”。
obs = celestia:getobserver()
obs:setframe(frame)

总结

objectname_ref = celestia:find( <refstring> )
celestia:select(objectname_ref)
objectname_tar = celestia:find( <tarstring> )
frame = celestia:newframe("lock", objectname_ref, objectname_tar)
obs = celestia:getobserver()
obs:setframe(frame)


CELX 等效-2

基于 observer:lock() 方法。

  • 找到并选择名为<refstring> 的参考物体并存储在“objectname_ref”中。
objectname_ref = celestia:find( <refstring> )
celestia:select(objectname_ref)
  • 找到名为<tarstring> 的目标物体,该物体必须与“objectname_ref”锁定并存储在“objectname_tar”中。
objectname_tar = celestia:find( <tarstring> )
  • 获取活动视图的观察者实例,并在选定物体从“objectname_tar”到“objectname_ref”的轴上激活锁定模式。
    锁定模式与将参考系设置为与“objectname_tar”作为目标物体和“objectname_ref”作为参考物体锁定相同。
obs = celestia:getobserver()
obs:lock(objectname_tar)

总结

objectname_ref = celestia:find( <refstring> )
celestia:select(objectname_ref)
objectname_tar = celestia:find( <tarstring> )
obs = celestia:getobserver()
obs:lock(objectname_tar)


示例
以下示例将使您的位置相对于地球中心保持不变,并使太阳(太阳)和地球在相机视图中保持固定位置。这与您在键盘上键入以下按键序列相同:[3] 键 → [F] 键 → [0] 键(零)→ [shift + :] 键。

CEL

select { object "Sol/Earth" }
follow { }
select { object "Sol" }
lock   { }

CELX 使用 observer:lock() 方法

-- Activate Lock-mode on target object.
objectname_ref = celestia:find("Sol/Earth")
celestia:select(objectname_ref)
objectname_tar = celestia:find("Sol")
obs = celestia:getobserver()
obs:lock(objectname_tar)

CELX 使用 observer:setframe() 方法

-- Set the coordinate system of the frame of reference to lock.
objectname_ref = celestia:find("Sol/Earth")
celestia:select(objectname_ref)
objectname_tar = celestia:find("Sol")
frame = celestia:newframe("lock", objectname_ref, objectname_tar)
obs = celestia:getobserver()
obs:setframe(frame)


返回 CEL 命令索引

华夏公益教科书