【ウディタ】マウス操作ゲーム自作解説⑩~マウスでキャラ移動~

レビニアよ。今回の解説はマウスによるキャラクターの移動


こんな感じ。RPGツクール的なヤツね。

※障害物を避けて動かすのは物凄く難しい処理になるから、今回はとりあえずクリック位置への移動のみになるわ。


先に適当なテスト用マップを作成して、


操作する用の主人公のキャラチップを用意しておいてね。

マウス移動コモンを作成する


それじゃ作っていきましょう。まずは条件付き並列実行コモンのテンプレを作成してね。
コモン作成:名前「▲マウス移動」、起動条件「並列実行/コモンセルフ99=1」

※過去の解説で何度も登場しているから割愛するけど、初見の方はこちらをご参照下さいね。


使用するセルフ変数はこんな感じ。


まずはマウスの左クリックをキー入力で取得し条件分岐を作成。画像だと入れ忘れてるけど1フレームウェイトも入れておいて頂戴。
■ウェイト:1 フレーム
■キー入力:CSelf10[クリック状態] マウス 左クリック(20)
■条件分岐(変数): 【1】 CSelf10[クリック状態] が 20 と同じ
-◇分岐: 【1】 [ CSelf10[クリック状態] が 20 と同じ ]の場合↓
|■
◇分岐終了◇


そしたらマウスクリック位置のマップ座標を取得マウスの画面座標にスクロール値を加算してタイルサイズで除算すればいいわ。
■変数操作: CSelf11[クリック座標X] = Sys71:マウスX位置 + Sys104:Xスクロール値
■変数操作: CSelf12[クリック座標Y] = Sys72:マウスY位置 + Sys105:Yスクロール値
■変数操作: CSelf11[クリック座標X]~CSelf12[クリック座標Y] /= Sys118:[読]タイルサイズ + 0


そしてその座標にキャラ動作指定で主人公を移動させる(詳細は後述)。
■動作指定:主人公 / X:CSelf11[クリック座標X],Y:CSelf12[クリック座標Y] に接近


キャラ動作指定はイベント制御コマンド内にあるわ。


対象に主人公を指定し、セルフ変数の値を変数呼出し値で指定して「座標に接近」をクリック。


左枠に移動の処理が追加されればOKよ。左下のチェックボックスも忘れないでね。

移動させるだけならこれだけで完成よ。試してみましょうか。


タイトルメニューのゲーム開始から実行しましょう。主人公のキャラチップを表示させてマウス移動コモンを起動し、テストマップに移動させてね。
■パーティ画像:1人目の前に[CharaChip/C_Silka.png]を挿入
■イベントの挿入[名]: [“▲マウス移動”] <コモンEv 4> / 1:起動
■場所移動:主人公 ▲マップID1[マウス移動テスト] X:20 Y:14 [トランジション + 暗転有り]


テスト起動してゲーム開始をクリックすると。


テストマップに移動。クリックした位置に主人公が移動すれば成功よ。


せっかくだから敵キャラも用意してみましょうか。適当なキャラチップを用意して、


マップイベントを配置。


イベント内容はこんな感じ。


触れられるとゲーム終了しちゃう死神さんね。

とまぁこんな感じで、マウスでクリック移動させるだけなら全然難しくない

クリックした移動先のマスを光らせる


次はクリックした移動先マスを分かりやすく点灯させてみましょう。移動先のマス目ぴったりの画面座標を算出するには、マウス座標を一旦タイルサイズで除算してから乗算すればいいわ。
■変数操作: CSelf13[ピクチャ座標X] = Sys71:マウスX位置 / Sys118:[読]タイルサイズ
■変数操作: CSelf14[ピクチャ座標Y] = Sys72:マウスY位置 / Sys118:[読]タイルサイズ
■変数操作: CSelf13[ピクチャ座標X]~CSelf14[ピクチャ座標Y] *= Sys118:[読]タイルサイズ + 0


そしてその座標にピクチャ表示
■ピクチャ表示:99997 [左上]ウィンドウ「<SQUARE>」サイズ[Sys118:[読]タイルサイズ,Sys118:[読]タイルサイズ] X:CSelf13[ピクチャ座標X] Y:CSelf14[ピクチャ座標Y] / 0(0)フレーム / パターン 1 / 透 30 / 通常 / 角 0 / 拡 100% / カラー R[200] G[200] B[200]

※ピクチャ番号はクリック演出で99999とメッセージウィンドウで99998を使用しているから、適当に99997辺りにしておきましょうか。


四角形を表示させる<SQUARE>を入力し、生成サイズに変数呼出し値でシステム変数118番(タイルサイズ)を指定するのよ。位置は左上を選択し、白色を不透明度30で表示することで光ってるっぽくしてみたわ。

※↑赤枠し忘れたけど「スクロールとリンク」にチェックも忘れないでね。


再度テスト起動。これでクリックした移動先マス目が点灯するようになっているはずよ。

後はこの光ったマスを消す処理ね。移動が完了or障害物で移動できず終了した時に消えるようにしましょうか(要は「主人公の移動が止まった時」よ)。


消去処理は条件分岐の外に記述するのよ。まず変数操作+でピクチャが表示されているかを取得条件分岐を作成
■変数操作+: CSelf15[ピクチャ表示中?] = ピクチャ:99997 の ピクチャが使用中?(1=YES)
■条件分岐(変数): 【1】 CSelf15[ピクチャ表示中?] が 1 と同じ
-◇分岐: 【1】 [ CSelf15[ピクチャ表示中?] が 1 と同じ ]の場合↓
|■
◇分岐終了◇


更に変数操作+で主人公が止まっているかを取得し条件分岐を作成
■変数操作+: CSelf16[移動中?] = 主人公 の 移動中?[1=YES 0=NO / ※主人公のみ1フレ以上停止時のみ0]
■条件分岐(変数): 【1】 CSelf16[移動中?] が 0 と同じ
-◇分岐: 【1】 [ CSelf16[移動中?] が 0 と同じ ]の場合↓

◇分岐終了◇


ピクチャが表示されていて主人公が動いていない=移動が終了したということになるわね。ここでピクチャ消去すればOK。
■ピクチャ消去:99997 / 0(0)フレーム


移動が終了したら光ったマス目が消灯すれば成功よ。

マウスクリックによる主人公の移動はこんな感じよ。前述のとおり「障害物を避けて移動先まで動く」とかするとめちゃんこ大変になっちゃうけど、とりあえず移動させるだけなら簡単だったわね。