WOLF RPGエディター(ウディタ)/イベントコマンド【サイトトップへ戻る】
■「X座標・Y座標」と「画面X座標・画面Y座標」の違い
(更新:2022/12/15)


イベントコマンド【変数操作+】にある
X座標・Y座標」と「画面X座標・画面Y座標」の違いについて説明します。



ショートカット
■「X座標」「Y座標」(標準、精密)とは?
┣◆【使用例】主人公の目の前にマップイベントがあるかどうかを調べる
┗◆【使用例】同じ座標の別のマップへ移動
■「画面X座標」「画面Y座標」とは?
┣◆【使用例】ピクチャでマップイベントの頭に「?」を表示
┗◆【使用例】マップイベントと完全に重なった時に場所移動を実行

【変数操作+】の基本説明は、別ページに記載しています。
【変数操作+の基本説明を開く】


  
■「X座標」「Y座標」(標準、精密)とは?

X座標・Y座標」は、マップの左上を「X座標=0」「Y座標=0」として、
指定したキャラクターがマップの左上から何マス目にいるのかを取得します。



標準」は1マス単位
精密」は0.5マス単位になります。

例えば「サンプルマップA」のスタート地点にいる主人公は…
X座標(標準)=15
Y座標(標準)=21

X座標(精密)=30
Y座標(精密)=42
になります。





スタート地点から右へ1歩(0.5マス)移動すると…
X座標(標準)=15
Y座標(標準)=21

X座標(精密)=31
Y座標(精密)=42
となり、「標準」ではX座標は変わりませんが、「精密」ではX座標が変わります。



【変数操作+】【場所移動】の座標の設定時に、
精密座標」にチェックを入れると精密座標の設定になります。







【マップチップの上書き】【動作指定】などの座標設定は「標準」での設定になります。







指定したキャラクターの座標の取得で【変数操作+】を使いますが、
変数呼び出し値の「9180000」や「9190000」でも取得できます。
【変数呼び出し値「9180000」や「9190000」の説明を見る】

▼変数呼び出し値で主人公の座標を取得
【イベントコード表示】

▼ 主人公のX座標・Y座標(標準)
■変数操作: このEvのセルフ変数0 = 主人公のX座標(マップ) + 0
■変数操作: このEvのセルフ変数1 = 主人公のY座標(マップ) + 0
▼ 主人公のX座標・Y座標(精密)
■変数操作: このEvのセルフ変数2 = 主人公のX座標(精密) + 0
■変数操作: このEvのセルフ変数3 = 主人公のY座標(精密) + 0


  
▼【使用例】主人公の目の前にマップイベントがあるかどうかを調べる

サブキー(Shift)を押した時に、主人公の目の前にいるマップイベントのイベントIDを取得します。

▼動作イメージ




今回の処理はイベントIDを取得するだけですが、
応用次第では「影グラフィック番号」などのマップイベントの情報を取得する事ができます。



移動幅が「0.5マス」の場合、主人公とマップイベントの位置によっては、
マップイベントの方に向かってサブキーを押しても反応しない事があります。
そのため下記設定では、0.5マスのずれにも対応した設定になっています。

移動幅が「0.5マス」ではなく「1マス」の場合は…
▼ 0.5マス用の処理
の以降の設定は不要です。

【イベントコード表示】【コモン出力ファイル】

■コモンイベント「サブキーでイベントID」

起動条件:並列実行(常時)

■■キー入力:CSelf10[キー][入力待ち] サブキー(12)
■変数操作+: CSelf11[X座標] = 主人公 の X座標(標準)
■変数操作+: CSelf12[Y座標] = 主人公 の Y座標(標準)
■変数操作+: CSelf13[向き] = 主人公 の 向き(1〜9)
■条件分岐(変数): 【1】 CSelf13[向き] が 1 と同じ
         【2】 CSelf13[向き] が 2 と同じ
         【3】 CSelf13[向き] が 3 と同じ
-◇分岐: 【1】 [ CSelf13[向き] が 1 と同じ ]の場合↓
|■変数操作: CSelf11[X座標] -= 1 + 0
|■変数操作: CSelf12[Y座標] += 1 + 0
|■
-◇分岐: 【2】 [ CSelf13[向き] が 2 と同じ ]の場合↓
|■変数操作: CSelf12[Y座標] += 1 + 0
|■
-◇分岐: 【3】 [ CSelf13[向き] が 3 と同じ ]の場合↓
|■変数操作: CSelf11[X座標] += 1 + 0
|■変数操作: CSelf12[Y座標] += 1 + 0
|■
-◇上記以外
|■条件分岐(変数): 【1】 CSelf13[向き] が 4 と同じ
          【2】 CSelf13[向き] が 6 と同じ
|-◇分岐: 【1】 [ CSelf13[向き] が 4 と同じ ]の場合↓
| |■変数操作: CSelf11[X座標] -= 1 + 0
| |■
|-◇分岐: 【2】 [ CSelf13[向き] が 6 と同じ ]の場合↓
| |■変数操作: CSelf11[X座標] += 1 + 0
| |■
|-◇上記以外
| |■条件分岐(変数): 【1】 CSelf13[向き] が 7 と同じ
           【2】 CSelf13[向き] が 8 と同じ
           【3】 CSelf13[向き] が 9 と同じ
| |-◇分岐: 【1】 [ CSelf13[向き] が 7 と同じ ]の場合↓
| | |■変数操作: CSelf11[X座標] -= 1 + 0
| | |■変数操作: CSelf12[Y座標] -= 1 + 0
| | |■
| |-◇分岐: 【2】 [ CSelf13[向き] が 8 と同じ ]の場合↓
| | |■変数操作: CSelf12[Y座標] -= 1 + 0
| | |■
| |-◇分岐: 【3】 [ CSelf13[向き] が 9 と同じ ]の場合↓
| | |■変数操作: CSelf11[X座標] += 1 + 0
| | |■変数操作: CSelf12[Y座標] -= 1 + 0
| | |■
| |◇分岐終了◇
| |■
|◇分岐終了◇
|■
◇分岐終了◇
■変数操作+: CSelf14[イベントID] = X:CSelf11[X座標] Y:CSelf12[Y座標]のイベントID
■条件分岐(変数): 【1】 CSelf14[イベントID] が 0 以上
-◇分岐: 【1】 [ CSelf14[イベントID] が 0 以上 ]の場合↓
|■文章:イベントIDは「\cself[14]」です。
|■イベント処理中断
|■
◇分岐終了◇
▼ 0.5マス用の処理
■変数操作+: CSelf17[X座標(0.5用)] = 主人公 の X座標(精密)
■変数操作+: CSelf18[Y座標(0.5用)] = 主人公 の Y座標(精密)
■変数操作: CSelf17[X座標(0.5用)]〜CSelf18[Y座標(0.5用)] %= 2 + 0
■変数操作: CSelf17[X座標(0.5用)] += CSelf11[X座標] + 0
■変数操作: CSelf18[Y座標(0.5用)] += CSelf12[Y座標] + 0
■条件分岐(変数): 【1】 CSelf11[X座標] が CSelf17[X座標(0.5用)] 以外
-◇分岐: 【1】 [ CSelf11[X座標] が CSelf17[X座標(0.5用)] 以外 ]の場合↓
|■変数操作+: CSelf14[イベントID] = X:CSelf17[X座標(0.5用)] Y:CSelf12[Y座標]のイベントID
|■条件分岐(変数): 【1】 CSelf14[イベントID] が 0 以上
|-◇分岐: 【1】 [ CSelf14[イベントID] が 0 以上 ]の場合↓
| |■文章:イベントIDは「\cself[14]」です。
| |■イベント処理中断
| |■
|◇分岐終了◇
|■
◇分岐終了◇
■条件分岐(変数): 【1】 CSelf12[Y座標] が CSelf18[Y座標(0.5用)] 以外
-◇分岐: 【1】 [ CSelf12[Y座標] が CSelf18[Y座標(0.5用)] 以外 ]の場合↓
|■変数操作+: CSelf14[イベントID] = X:CSelf11[X座標] Y:CSelf18[Y座標(0.5用)]のイベントID
|■条件分岐(変数): 【1】 CSelf14[イベントID] が 0 以上
|-◇分岐: 【1】 [ CSelf14[イベントID] が 0 以上 ]の場合↓
| |■文章:イベントIDは「\cself[14]」です。
| |■イベント処理中断
| |■
|◇分岐終了◇
|■
◇分岐終了◇
■文章:目の前にマップイベントはありません。


  
▼【使用例】同じ座標の別のマップへ移動

同じ座標の別のマップへ移動する処理を設定します。

今回はサブキー(Shift)を押す度に、マップID[1]と[2]の同じ座標へ行き来する設定を行います。

サンプルゲームでは、サンプルマップAとBを行き来します。

▼スタート地点でサブキーを押した時


【イベントコード表示】

■コモンイベント

起動条件:並列実行(常時)

■キー入力:CSelf10[キー][入力待ち] サブキー(12)
■条件分岐(変数): 【1】 Sys13:イベント実行中?(1=ON) が 1 と同じ
-◇分岐: 【1】 [ Sys13:イベント実行中?(1=ON) が 1 と同じ ]の場合↓
|■イベント処理中断
|■
◇分岐終了◇
■変数操作+: CSelf11[マップID] = 現在のマップID
■変数操作+: CSelf12[X座標] = 主人公 の X座標(精密)
■変数操作+: CSelf13[Y座標] = 主人公 の Y座標(精密)
■条件分岐(変数): 【1】 CSelf11[マップID] が 1 と同じ
-◇分岐: 【1】 [ CSelf11[マップID] が 1 と同じ ]の場合↓
|■変数操作: CSelf11[マップID] = 2 + 0
|■
-◇上記以外
|■変数操作: CSelf11[マップID] = 1 + 0
|■
◇分岐終了◇
■場所移動:主人公 ▲マップIDXX<CSelf11[マップID]>
      X:CSelf12[X座標] Y:CSelf13[Y座標] [精密] [トランジションなし]

▼場所移動は変数呼び出し値で設定します



X座標・Y座標をセルフ変数に出力せず、変数呼び出し値「9180002」「9180003」で設定する方法もあります。

【イベントコード表示】

■コモンイベント

起動条件:並列実行(常時)

■キー入力:CSelf10[キー][入力待ち] サブキー(12)
■変数操作+: CSelf11[マップID] = 現在のマップID
■条件分岐(変数): 【1】 CSelf11[マップID] が 1 と同じ
-◇分岐: 【1】 [ CSelf11[マップID] が 1 と同じ ]の場合↓
|■変数操作: CSelf11[マップID] = 2 + 0
|■
-◇上記以外
|■変数操作: CSelf11[マップID] = 1 + 0
|■
◇分岐終了◇
■場所移動:主人公 ▲マップIDXX<CSelf11[マップID]>
      X:主人公のX座標(精密) Y:主人公のY座標(精密) [精密] [トランジションなし]




*注意*

マップBはマップAよりもマップサイズが小さいため、
マップAの右の方(マップBに存在しないマス座標)でサブキーを押すとエラーが発生します。



今回の処理は、基本的に2つのマップサイズを同じサイズにする必要があります。


▲トップへ戻る▲


  
■「画面X座標」「画面Y座標」とは?

画面X座標・画面Y座標」は、
現在映っているゲーム画面の左上を「画面X座標=0」「画面Y座標=0」として、
指定したキャラクターがどの位置にいるのかをピクセル単位で取得します。



キャラクターの画面位置の取得は、キャラクターの左右中央の足元位置になります。



▼スタート時の画面座標


ゲーム画面は「320×240」のサイズを縦横2倍で拡大表示しているため、上図の画像サイズは「640×480」になっています。



ピクチャを表示する時には、この「画面X座標・画面Y座標」と同じく、
現在映っているゲーム画面の左上を基準にピクセル単位で表示します。

そのため、ピクチャに関係する処理でこの「画面X座標・画面Y座標」を使う事が多いです。


  
【使用例】ピクチャでマップイベントの頭に「?」を表示

マップイベントの頭上に「?」を表示します。



「?」の表示はピクチャを使って表示します。

ピクチャの表示位置は、マップイベントの「画面X座標・画面Y座標」をセルフ変数[0][1]に取得して、
変数呼び出し値「1100000」「1100001」を使ってピクチャの表示位置を設定します。



【イベントコード表示】

■マップイベント

起動条件:決定キーで実行

■変数操作+: このEvのセルフ変数0 = このマップイベント の 画面X座標
■変数操作+: このEvのセルフ変数1 = このマップイベント の 画面Y座標
■変数操作: このEvのセルフ変数1 -= 20 + 0
■ピクチャ表示:1 [中心]文字列[\E?] X:このEvのセルフ変数0 Y:このEvのセルフ変数1 / 0(0)フレーム /
       パターン 1 / 透 255 / 通常 / 角 0 / 拡 100% / カラー R[100] G[100] B[100]
■文章:にゃ?
■ピクチャ消去:1 / 0(0)フレーム

ちなみに今回の「?」は文字で表示していますが、画像ファイルで表示する事もできます。


  
▼【使用例】マップイベントと完全に重なった時に場所移動を実行

マップイベントを完全に重なった時に【場所移動】を実行する処理を設定します。


場所移動用のマップイベントは、通常では以下のように【場所移動】のみの設定を行います。



しかし0.5マス移動の場合、上下移動でマップイベントに重なろうとすると、半分乗った時点で【場所移動】が実行します。

▼この時点で場所移動が実行



また場所移動の移動先が場所移動用のマップイベントの上に設定した場合、
移動先で上下移動を行うと、移動先の場所移動イベントが実行して、元に戻ってしまうような現象も発生します。

▼移動先で上下移動すると場所移動が実行



今回は…
マップイベントの画面Y座標 − 主人公の画面Y座標 = 両者の距離(ピクセル単位)
の計算を行い、
両者の距離が「0」(完全に重なった状態)になった時に【場所移動】が実行するように設定します。

なお、画面X座標の方は、何も設定しなくても両者の距離が「0」にならないと【場所移動】が実行しませんので、
画面X座標を対象とした両者の距離を調べる処理はありません。

【イベントコード表示】

■マップイベント

起動条件:プレイヤー接触
すり抜け:ON

■変数操作+: このEvのセルフ変数0 = 主人公 の 画面Y座標
■変数操作+: このEvのセルフ変数0 -= このマップイベント の 画面Y座標
■条件分岐(変数): 【1】 このEvのセルフ変数0 が 0 以外
-◇分岐: 【1】 [ このEvのセルフ変数0 が 0 以外 ]の場合↓
|■イベント処理中断
|■
◇分岐終了◇
■場所移動:主人公 ▲マップID1[サンプルマップA] X:11 Y:21 [トランジションなし]


▲トップへ戻る▲



◎関連ページ

◆「イベントコマンド」って何?
┣◆文章の表示
┃┗◆特殊文字
┣◆選択肢
┃┗◆【使用例】選択肢
┣◆変数操作
┃┗◆演算子について
┣◆DB操作
┣◆文字列操作
┃┗◆【使用例】文字列操作
┣◆変数操作+
┃┣◆「X座標・Y座標」と「画面X座標・画面Y座標」の違い
┃┣◆【使用例】変数操作+の「キャラ」と「位置」
┃┗◆【使用例】変数操作+の「ピクチャ」と「その他」
┣◆条件(変数)
┣◆条件(文字列)
┣◆キー入力
┃┗◆【使用例】キー入力
┣◆ピクチャ
┃┗◆表示形式(通常・加算・減算・乗算)について
┣◆エフェクト
┃┗◆【使用例】エフェクト
┣◆サウンド
┣◆セーブ・ロード操作
┣◆パーティ画像
┣◆チップ処理
┃┗◆【使用例】チップ処理
┣◆場所移動
┣◆イベント制御
┃┣◆キャラクターの動作指定
┃┗◆【使用例】イベント制御
┣◆コモンイベント
┣◆ダウンロード
┗◆プロ版機能

YADOT-WOLFトップ  気紛れな空間へ戻る  メール