スクリプト制作講座 B01
拡張編集はLuaというスクリプト言語を採用している。
この講座ではLuaの文法を追いながら、拡張編集のスクリプトをどう書くかを見ていく。
はじめに
スクリプトのデバッグに非常に有用なプラグインがある(patch.aul)。
このプラグインはコンソールを追加するが、このコンソールにスクリプトのエラーや出力などは表示されるため、デバッグ速度が格段に上がる。
適当な図形などを追加して、そこにスクリプト制御フィルタを適用するとテキストボックスが現れる。
ここにスクリプトを記述していく。
code:Lua
print("Hello world")
などと入力して、コンソールに文字が表示されることを確認する。
0. Luaの文法1
http://milkpot.sakura.ne.jp/lua/lua51_manual_ja.html これはLuaのリファレンスの日本語訳である。読める人はこれを読んでもよい。
毎回0.ではこの先を読み進めるのに必要な最低限の情報を書いていく。
code:Lua
-- コメントはハイフン2個で始める。 // に相当
--[[
または ハイフンと角括弧を用いて
このようにすることで複数行の
コメントを行うことができる。
/* */に相当
]]
-- print は標準出力に出力する関数である。
print("Hello world")
-- 数値なども気にせず突っ込んでよい。
print(123 + 456)
今後度々出てくるobjというものは、拡張編集の用意したテーブル型の値である。
テーブルというのは、配列と連想配列をひとまとめにしたようなものである。
obj.oxなどとすることで、テーブルobjの中のキーoxの値を取り出せる。
1. 移動
obj.ox変数の内容を変更することで、オブジェクトのX軸方向への移動を行える。
同様にYはobj.oy、Zはobj.oz。
これは標準描画/拡張描画のX,Y,Zとは独立なパラメータである。それを表すのにはobj.x,obj.y,obj.z変数が用いられる。
→ obj変数 - 座標
code:Lua
obj.ox = obj.ox + 100
obj.oy = obj.oy + 200
(100,200)だけ移動する例。Luaには複合代入演算子(+=等)は存在しない。
これは座標フィルタ効果を用いてX:100,Y:200としたときと同じ挙動になる。
2. 拡大率
obj.zoom変数の内容を変更することで、オブジェクトの拡大率を変更できる。
これは標準描画/拡張描画の「拡大率」とは独立なパラメータである。
code:Lua
obj.zoom = obj.zoom * 1.5
拡大率を1.5倍する例。
これは拡大率フィルタ効果を用いて拡大率:150としたときと同じ挙動になる。
3. 回転
obj.rz変数の内容を変更することで、オブジェクトのZ軸基準の回転(通常の回転)を行える。
同様にX軸回転はobj.rx、Y軸回転はobj.ry。
これは座標/拡大率とは異なり標準描画/拡張描画の「回転」などそのものを表すパラメータである。
→ obj変数 - 角度
code:Lua
obj.rz = obj.rz + 90
90度右に回転する例。これらの変数は弧度法ではなく度数法である。
これは回転フィルタ効果を用いてZ:90としたときと同じ挙動になる。
4. 時間
拡張編集は時間を表す変数を複数用意している。(obj.time,obj.frame)
obj.timeは秒単位の現在時間を表す。
obj.frameはフレーム単位の現在時間を表す。
code:Lua
print(obj.time, obj.frame)
などとして、両者の違いを確かめられたい。
例えば
code:Lua
obj.ox = obj.ox + obj.time
などとすると、時間によって位置が変わるスクリプトになる。
時間を表す変数は他にもある。
obj.totaltimeはオブジェクトの長さを秒単位で表す。
obj.totalframeはそのフレーム単位版。
obj.time/obj.totaltimeはオブジェクトの開始から終了にかけて$ [0,1] を動いてくれる値になり、よく使うことになる。
code:Lua
obj.ox=obj.ox + obj.time / obj.totaltime * 100
などとすると、オブジェクトの開始から終了にかけてX軸方向に100動くスクリプトになる。
課題
時間で円形に移動していくスクリプトを記述してみよ。
次 スクリプト制作講座 B02