トップページ > .CELXスクリプトガイド > .CELXスクリプトについて
.CELXスクリプトについて
.CELXスクリプトとは
.CELXスクリプトは.CELスクリプトと同様、Celestiaを自動的に制御する事ができます。
主な機能
- 天体の選択・移動
- シミュレーション時刻の設定
- 視点の操作
- レンダリングの表示切替
- 天体名称の表示切替
.CELXスクリプトはLuaを基としており、.CELスクリプトよりも複雑でより高機能な事ができます。
.CELスクリプトには無い.CELXスクリプトでできる機能
- 変数の使用
- 画面の分割
- ファイルの読み書き・外部プログラムの実行
- スクリーンショットの保存
- スクリプト独自のキーボード操作
他にも様々な機能があります。
Luaに関しての詳細はこちら。
Lua 5.0 Reference manual
非公式日本語訳
C、C++、Javaなどと同様の要領で出来ます。以下は一例です。
obs = celestia:getobserver()
while 1 do
nstars = celestia:getstarcount()
index = math.floor(nstars * math.random())
star = celestia:getstar(index)
celestia:select(star)
obs:goto(star, 10)
wait(10)
end
このページのTOPへ
基本
詳細はhttp://www.lua.org/を参考にしてください。
ここでは簡単な例を示します。
行の最後に";"をつける必要は特にありません。
コメントは --(単一行)、--[[ "コメント" ]] (複数行)が使用できます。
なお、.CELスクリプトの様なスクリプトの初めと終わりの中括弧{ }は不要です。
簡単なスクリプト
以下のスクリプトではCelestiaの画面上に"Hello World!"という文字列を10秒間表示します。
celestia:flash("Hello World!", 10)
celestia:flashは画面左下に文字列を表示します。引数として1番目に文字列、2番目に数値を取ります。
"Hello World!"は表示する文字列です。文字列は""で囲んでください。
10 は継続時間です。どれだけの時間指定した文字列を表示するかを決めます。単位は秒です。
テキストエディタで作成できます。拡張子を".celx"にして保存してください。
以上の枠線内の内容を保存して実行すればCelestia画面の左下に"Hello World!"が表示されます。
Celestiaのインストール時に関連づけられていればファイルをダブルクリックして実行できます(Windows版)。
また、メニューバーよりWindows版: File→Open Script...(日本語版:ファイル→スクリプトを開く...)、Mac OSX版: File→Run Script...(日本語版:ファイル→スクリプトを開く...)でスクリプトを選択する事ができます。
変数と型
変数を宣言する必要は無く、型も持ちません。変数の中身が型を持ちます。その為、同じ変数に様々な形態の値を入れる事が可能です。
下記の例では変数aに数値、文字列、ブール代数など様々な値を代入しています。
a = 1
a = a / 2
a = "Hello World!"
a = a / 2
a = true
a = not a --
またテーブル(連想配列)を使用する事ができ、各要素に名前を設定する事ができます。
t = {}
t["key1"] = "value1"
t.key2 = "value2"
u = { key1="value1", key2="value2" }
v = { 1,2,3,4,5 }
if文、for文、while文
Luaでは以下の様にif文、for文、while文を使用できます。
この例では1から10まで1ずつ増えながら繰り返します。
for i = 1, 10 do
...
end
この例では100から0まで10ずつ減りながら繰り返します。
for i = 100, 0, -10 do
...
end
この例ではiが10より大きいときにthen-endの間を実行します。
if i > 10 then
...
end
この例ではiが10より大きく100以下の場合にthen-else間、そうでない場合にelse-end間を実行します。
if i > 10 and i <= 100 then
...
else
...
end
論理演算子はand、or、notが使用できます。
if i > 10 and i <= 100 then
if i < 10 or i >= 100 then
if not i > 10 then
この例ではiが100より大きくなるまでループの中身を実行します。ループの最後にiを1だけ増やしています。
i = 0
while i <= 100 do
...
i = i + 1
end
数学関数
Luaでは以下の数学関数が使えます。
文中のx、y、x1、x2などは数値です。
math.abs(x)
math.acos(x)
math.asin(x)
math.atan(x)
math.atan2(x, y)
math.ceil(x)
math.cos(x)
math.deg(x)
math.exp(x)
math.floor(x)
math.log(x)
math.log10(x)
math.max(x1, x2, ...)
math.min(x1, x2, ...)
math.mod(x, y)
math.pow(x, y)
math.rad(x)
math.sin(x)
math.tan(x)
math.frexp(x)
math.ldexp(x)
math.random()
math.random(x)
math.random(x, y)
math.randomseed(x)
math.randomseeddestiny(x)
math.pi
使用例:
obs = celestia:getobserver()
earth = celestia:find("Sol/Earth")
celestia:select(earth)
obs:synchronous(earth)
obs:gotolonglat(earth, math.rad(139.541), math.rad(35.6725), earth:radius()+0.05, 5)
wait(6)
v = celestia:newvector(1, 0, 0)
rot = celestia:newrotation(v, -math.pi/2)
obs:rotate(rot)
obs = celestia:getobserver()
s = math.random(celestia:getstarcount())
obj = (celestia:getstar(s))
celestia:select(obj)
obs:center(obj, 3)
wait(3)
obs:goto(obj, 3)
wait(3)
トップページ > .CELXスクリプトガイド > .CELXスクリプトについて