GOREとにゃんこの桃源郷

主観的にCDのレビューやら、日記やら、色々と。
ゴアとかメタルとかロックとか

RPGツクールVXAceは死なない。

2019-01-03 | RPGツクールMZ,VXace,VX,2000,95,1~5
 久し振りに再開し、また特に意味の無いものを、長時間費やして作った。画像でよく分からないかと思うが、複数人を同時に押すというだけのシステムだ。
 まず人に当たると、プレイヤーの向きに合わせて、1マス隣を確認。
⇒イベント無し、且つ移動可能タイルの場合、このイベントは隣へ移動する。
⇒イベント有りの場合は更に1マス隣も確認。
⇒イベント無しだが移動不可能タイルの場合、「もう無理ー。」と言われ移動しない。
 ⇒⇒イベント無し、且つ移動可能タイルの場合、このイベントと、隣接したイベントどちらも移動する。
 ⇒⇒イベント有りの場合は更に1マス隣も確認。
 ⇒⇒イベント無しだが移動不可能タイルの場合、最も先のタイルに居る人だけジャンプして「もう無理ー。」と言い誰も移動しない。


 変数メインで書いたため、何人だろうと押せると思うが、画面のマス数によりジャンプが見えなくなるため、なるべく狭いマップで使用したい。また、コモンイベント1つで収まったので、イベント自体はコモン呼び出しを設定するだけで機能する。
・イベントコマンド 現在座標(変数)のxに、このイベントのマップXを入れる。
・イベントコマンド 現在座標(変数)のyに、このイベントのマップYを入れる。
・イベントコマンド 移動先座標(変数)のxに、このイベントのマップXを入れる。
・イベントコマンド 移動先座標(変数)のyに、このイベントのマップYを入れる。
・条件分岐 プレイヤーの向き。
・向き下⇒移動先座標yを加算1する。 向き上⇒減算1する。
・向き左⇒移動先座標xを減算1する。 向き右⇒加算1する。
・イベントコマンド 指定座標の情報取得でイベントID⇒移動先xと移動先yの変数で指定。
・条件分岐 指定座標のイベントIDが1以上。
 ※設定されたマップイベントはID1から始まるため、1以上=マップイベント。
・1以上の場合、適当な変数に加算1する。(直線上に何人いるかここでカウントしている)
・1未満の場合、同じ座標の情報取得でリージョンIDを取得。
・リージョン1なら移動可として、移動処理にラベルジャンプ。
 ※通行可否判定(passable?)で入り口に入られても困るためリージョンにした。



 実際の移動の設定は、さっきと逆順で対象座標のイベントIDを取得しながら行う。先にイベント末端の座標が移動可能か判定し、移動出来ない場所だったら、最後に取得したイベントIDでキャラクターをジャンプさせ(やり方は後述)処理を中断する。移動可能な場合、プレイヤーの向きに応じてx或いはyを加減し、イベントIDを取得したら移動させ、移動されたら必ず人数カウントの変数を減算1する。これが0になったら、プレイヤーと当たったイベントを移動させて終わり。
 最後に、当たった対象ではない、イベントIDを取得しただけのイベントを動かす方法。イベントコマンドのスクリプトで入力。

v = $game_variables;r = RPG::MoveRoute.new
c = RPG::MoveCommand
r.repeat = false;r.skippable = false;r.wait = true
r.list = []
r.list.push(c.new(29,[5]))
r.list.push(c.new(37),c.new(2),c.new(38))
r.list.push(c.new(29,[4]),c.new)
cha = get_character(v[13])
cha.force_move_route(r)
if r.wait
Fiber.yield while cha.move_route_forcing
end

※長い部分はアルファベット一文字に省略している。通常の移動ルート設定と同様に、繰り返し、移動出来ない場合スキップ、移動完了までウェイト、の設定が必要。次に空の配列を準備。コマンドはスクリプトエディタで$Game_Characterの定数、に書いてある。配列への追加は複数まとめて可能だし、別けても大丈夫。イベントのスクリプト欄はこれでも限界に近いため、複雑な移動には不向き。以上、正月から何やってんだ俺は、のコーナーおしまい。。


最新の画像もっと見る

コメントを投稿