[GameMaker: Studio] マウス座標はdevice_mouseで。

gms_using_mouse_1

デスクトップPCでシンプルなゲーム画面で、マウス操作のゲームを作ってる人の多くは恐らくはmouse_x/yで座標を取得して、mouse_check_buttonでボタンの状態をチェックしているかと思います。

しかしこのやり方ではタッチ操作だったり複雑なview構成をしたりと、本格的に作りこんいくと大きな障害となってしまう場合があります。

まず一つは、mouse系命令では単一のクリック操作しか取得できません。

シューティングゲームで、キーボードがあればキー操作で、なければオンスクリーンコントローラー(OSC)で操作できるようにするとします。
キーボードは特に問題はありませんが、OSCで方向キーと発射ボタンを配置したとしても、mouse系命令では一度にいずれか一つしか判定できません。
スマホやタブレットでマルチタッチに対応したデバイスであっても、mouse系命令を使用していたらタッチ箇所は一つしか取得できないので移動と発射は同時には出来ないことになります。

そしてもう一つはviewの問題です。

mouse系命令は各viewで独立した判定を持っています。
単なるクリックであれば困ることはないですが、タッチパネルのデバイスでドラッグやスワイプといった操作でviewを跨ぐ場合は、view境界で指が離れたと判断されてしまい、そこでドラッグやスワイプが終了してしまいます。

これらの問題はdevice_mouse系命令を使用することで回避できます。
使い方も簡単で、マルチタッチにも対応しています。
device_mouse_x/y_to_guiならview境界の影響も受けずに済みます。

完全にマウス専用でシングルクリック/タッチしか使わないという場合でも、一度device_mouse系命令を使ってみてください。
特に悩むこともなくすんなり移行できるはずです。

ヴァンアレン帯 Dはこの両方の問題にあてはまりましたが、device_mouse_x/y_to_guiを使用しているので、キーボードでもタッチパネルでも問題なくプレイできます。

もちろんmouse系命令の制限を理解した上で、それでまったく問題はないという場合はそれでOKですね。