移動ルートの設定 / ツクールVXAceスクリプト(RGSS3)wiki
ツクールVXAceで移動ルートの設定をスクリプトで行うなら以下の通りです。
route = RPG::MoveRoute.new
route.repeat = trueかfalse #動作を繰り返すか
route.skippable = trueかfalse #移動を飛ばすか
route.wait = trueかfalse #移動が終わるまで待つか
route.list = []
mc = RPG::MoveCommand
route.list.push(mc.new(コマンドID(, [パラメータ]))
route.list.push(mc.new(0)) #移動コマンドの終端を設定
cha = get_character(イベントID) #イベントID代入
cha.force_move_route(route) #移動の実行
if route.wait #移動が終わるまで待つか
Fiber.yield while cha.move_route_forcing
end
イベントIDについて補足すると、0で「このイベント」、1以上で数値のIDを指定します。
サンプルコード
・「このイベント」の移動ルートを設定
・繰り返さない、スキップしない、移動が終わるまで待つ
・下に移動、左に移動、すり抜けON、60フレームウェイト、下を向く、x:1,y:1の距離をジャンプ
route = RPG::MoveRoute.new
route.repeat = false
route.skippable = false
route.wait = true
route.list = []
mc = RPG::MoveCommand
route.list.push(mc.new(1))
route.list.push(mc.new(2))
route.list.push(mc.new(37))
route.list.push(mc.new(15, [60]))
route.list.push(mc.new(16))
route.list.push(mc.new(14, [1,1]))
route.list.push(mc.new(0))
cha = get_character(0)
cha.force_move_route(route)
if route.wait
Fiber.yield while cha.move_route_forcing
end
移動ルートのコマンドIDについてはGame_Characterの定数を参照してください。
このように移動ルートの設定は長文になるため、イベントスクリプトで行うのは難しいでしょう。
コード解説
移動ルートの設定はイベントスクリプトの中では一番複雑であり、解説が長くなります。
1行目 "RPG::MoveRoute.new"
移動ルートを設定するときは専用のクラスを取得・初期化する必要があります。
移動ルートのリピートやスキップをするかなどはこのクラスの変数に代入し、設定していきます。
2行目 "route.repeat"
リピートをする場合はtrueを、しない場合はfalseを代入し、設定します。
初期値はtrueになっているのでこの行を記述しなければリピートされます
3行目 "route.skippable"
移動できな場合は飛ばすときはtrueを、飛ばさないときはfalseを代入し、設定します。
初期値はfalseになっているのでこの行を記述しなければスキップされません。
4行目 "route.wait"
ウェイトをかける場合はtrueを、かけない場合はfalseを代入します。
初期値はfalseになっているのでこの行を記述しなければウェイトされません。
5行目 "route.list"
移動ルートの具体的な内容(コマンド)はすべて"route.list"で表される配列に代入されていきます。
5行目ではこのlistに空の配列を代入することによって配列を宣言しています。
6行目 "RPG::MoveCommand"
移動ルートの個々のコマンドを設定するクラスです。
5行目で紹介したlistにはこのクラスで設定されたオブジェクトが、配列として追加されていきます。
ここではイベントスクリプトで行うことを想定しているので、このクラスをmcという短い変数に代入しています。
7行目 "route.list.push(mc.new(コマンドID(, [パラメータ]))"
7行目からは移動ルートのコマンドの設定が続きます。
pushとは配列に()内の要素を追加するメソッドで、5行目で宣言したlistにコマンドを追加しています。
見やすさのためと行の長さを節約するため、サンプルコードでは7行目から縦にずらっとこのコードを並べていますが、以下のように横に並べても可能です。
route.list.push(mc.new(1), mc.new(2), mc.new(37), mc.new(15, [60]), mc.new(16), mc.new(14, [1,1]), mc.new(14, [1,1]))
ちなみにmcとはMoveCommandクラスを代入した変数です。
また、このコマンドには必要に応じてパラメータを設定しなくてはならず、これがなかなか分かりにくいため、初めて使用する際は混乱してしまいます。
移動ルートのコマンドIDとパラメータの設定は以下のようになります。
1:下に移動 mc.new(1)
2:左に移動 mc.new(2)
3:右に移動 mc.new(3)
4:上に移動 mc.new(4)
5:左下に移動 mc.new(5)
6:右下に移動 mc.new(6)
7:左上に移動 mc.new(7)
8:右上に移動 mc.new(8)
9:ランダムに移動 mc.new(9)
10:プレイヤーに近づく mc.new(10)
11:プレイヤーから遠ざかる mc.new(11)
12:一歩前進 mc.new(12)
13:一歩後退 mc.new(13)
14:ジャンプ mc.new(14, [x座標,y座標])
15:ウェイト mc.new(15, [ウェイトするフレーム数])
16:下を向く mc.new(16)
17:左を向く mc.new(17)
18:右を向く mc.new(18)
19:上を向く mc.new(19)
20:右に 90 度回転 mc.new(20)
21:左に 90 度回転 mc.new(21)
22:180 度回転 mc.new(22)
23:右か左に 90 度回転 mc.new(23)
24:ランダムに方向転換 mc.new(24)
25:プレイヤーの方を向く mc.new(25)
26:プレイヤーの逆を向く mc.new(26)
27:スイッチ ON mc.new(27,[スイッチID])
28:スイッチ OFF mc.new(28,[スイッチID])
29:移動速度の変更 mc.new(29,[移動速度]) (例)移動速度が3なら1/2倍速
30:移動頻度の変更 mc.new(30,[移動頻度]) (例)移動頻度が3なら通常
31:歩行アニメ ON mc.new(31)
32:歩行アニメ OFF mc.new(32)
33:足踏みアニメ ON mc.new(33)
34:足踏みアニメ OFF mc.new(34)
35:向き固定 ON mc.new(35)
36:向き固定 OFF mc.new(36)
37:すり抜け ON mc.new(37)
38:すり抜け OFF mc.new(38)
39:透明化 ON mc.new(39)
40:透明化 OFF mc.new(40)
41:グラフィック変更 mc.new(41,[画像名,インデックス]) (例)Animalの鶏に画像変更するなら["Animal",2]
42:不透明度の変更 mc.new(42,[不透明度])
43:合成方法の変更 mc.new(43,[合成方法]) (例)合成方法が1なら加算
44:SEの演奏
se = RPG::SE.new("Attack1",80,120)
route.list.push(mc.new(44,[se]))
これならわざわざ移動ルートで設定するよりは普通にSEの演奏を行った方が良い場面もありそうですね。
8行目 "route.list.push(mc.new(0))"
最後にコマンドIDが0のコマンドを入れないと移動ルートの終端が認識されなく、イベントが固まってしまいます。
これは必ずlistの配列の最後に入れてください
9行目 "cha = get_character(イベントID)"
移動ルートを設定したいイベントIDを設定してください。
イベントスクリプトで行うことを想定しているため、"get_character"メソッドを"cha"という短い名前の変数に代入しています。
10行目 "cha.force_move_route(route)"
"force_move_route"はキャラクターに移動を強制させるメソッドです。
これまで設定してきたコマンドが入ったlist配列がこの行で形になります。
11,13行目 "if route.wait ~ end"
上で設定したroute.waitがtrueだったらウェイトをかけるようにするif文です。
12行目 "Fiber.yield while cha.move_route_forcing"
移動ルートのコマンドがlist行列に残っている限り"Fiber.yield"を行う、つまり、ウェイトをかけるように設定してる行です。
このように移動ルートの設定はスクリプトで行うには煩雑になりがちで、スクリプトで行うメリットが薄いです。
特殊な動きにしたいときやスクリプトで行なった方が効率が良いときなどに、参考にしてください。
ツクールVXAceスクリプトリファレンスwikiトップページへ戻る
オリジナルシステムなどの製作依頼・相談があればプラグイン・マップ等個別製作依頼のページまでお願いします。