LNS102 マウス操作

ゲーム全体にマウス操作を適用します。






参考資料

デモ動画

※旧LNS005a マウス操作 のデモ動画ですが、基本的な機能は同じため参考になると思います。


基本情報

前提スクリプト


拡張タイプ

★ 既成 (導入するだけでゲームの挙動が変化する)
◆ 要注意 (内部の挙動を変えるため競合の可能性あり)


説明

概要

 様々な場面でマウスによる操作をサポートします。
  • Game_Player の移動に関するメソッドを再定義しているため、他のスクリプト素材と競合する可能性があります。
  • alias によて機能を拡張するスクリプトはこれより後ろに入れてください。

◆ ウィンドウ操作

Window_Selectable 及びそのサブクラスでは、
  • マウスがウィンドウの領域内にあると自動的に相当位置のコマンドを選択します。
  • 左クリックで決定右クリックで(定義されていれば)キャンセルを行います。
  • ホイールが使える場合は、ホイールの操作によってスクロールを行います。
  • Window_Selectable に準じた操作方法のウィンドウ(Scene_Fileのセーブファイルや、Window_NumberInputなど)でも同様の操作が可能です。

◆ マップ操作

  • イベントに隣接した状態でそのイベントをクリックすると、そのイベントを起動します。
    • カウンターを隔てている場合は隣接していなくてもイベントを起動できます。
  • 足元をクリックすると、足元のイベントを起動します。
    • 通常の C ボタンによる起動では、正面にイベントがあった場合も足元のイベントが優先されますが、マウス操作の場合はどちらを起動するかを選べることになります。

  • LNS140 マップ/キャラ拡張 を導入している場合、マップ上の通行可能なマスを左クリックすると、可能ならばそこへ移動します。移動中にイベントが起動した場合、そこで止まります。
    • 迷路などの意義を考慮して、目的地まで 30 マス以上歩く必要がある場合はその場から動きません。
    • この値は LNS140 マップ/キャラ拡張 側の RStep_Limit で変更できます。
    • nil にすれば上限を設けませんが、移動量が大きくなると探索に時間がかかるためラグが発生します。
  • クリックしてからボタンを押し続けると、その方向に進み続けます。縦と横どちらかの方向にしか進めませんが、片方に進めない場合はもう片方に進もうと試みます。
    • SmartDash が有効な場合、プレイヤーキャラからクリック位置までの距離に応じて自動的に移動速度が変化します。
    • LNS140 マップ/キャラ拡張 を導入している場合、マウスボタンを押してから30フレーム経過するとこちらのモードに移行します。
  • 中央ボタンは Aボタン として扱われ、押している間ダッシュします。
    • SmartDash が有効な場合はそちらが優先されます。

  • 右クリックでメニューを開きます。
  • メッセージウィンドウなどの操作は上記の [ウィンドウ操作] と同様です。
  • ALTを押していると、移動可能な地面は緑色に、当たり判定のあるイベントは赤く光ります。
    • 当たり判定のない(プライオリティが「通常キャラと同じ」ではない)イベントでは変化しません。
    • また、その位置から移動可能な方向が矢印で表示されます。

◆ 戦闘時操作

  • 通常の選択に加えて、画面上のエネミー画像からも対象を選択できるようにします。
    • 手前に表示されるエネミーが選択される仕様上、配置によっては選択できないエネミーがいる可能性があります。エネミーの配置の際にはなるべく重ならないようにご注意ください。
    • そのような場合は通常通りウィンドウから(カーソル操作で)選択してください。
    • カーソルキーで選択する場合、それに合わせてマウスも移動しますが、そのままマウスを動かさなければ対象エネミーが他のエネミーに隠れていても選択対象が変わることはありません。
  • バトラーの選択の際、バトラーグラフィックの周囲が縁取られてより選択状態が分かりやすくなります。
  • LNS300 バトルレイアウト変更を導入している場合、アクターも同様にグラフィックから選択できるようになります。


備考

再定義されるメソッド

Game_Player#real_move_speed
  • マウスクリックによる移動を考慮した内容に再定義します。

Game_Player#move_by_input
  • マウスクリックによる移動などを拡張可能にするため再定義します。

設定項目

Input_Alias
マウスの操作をボタン入力として扱うクラスのリスト
Smart_Dash <既定値 true >
マップ画面でマウスによって移動する場合、カーソルのプレイヤーからの距離に応じて自動で速度を変える

Input_Alias 書式
Input_Alias[Window_Base] = { A: :M , B: :R , C: :L , L: :X1, R: :X2 }
#            (クラス名)  = { (内容), (内容), ...}
現在のシーンやウィンドウがキーにない場合、スーパークラスの設定を参照する。(例: Window_Selectable でのBボタンは、Window_Base でのBボタンの設定に従う)
(内容)の記法は、「:(キー)=>(値)」又は「(キー): (値)」

(値)の意味
nil(未定義)
親クラスの設定に従う
false
エイリアスしない
シンボル
そのシンボルに対応したマウス入力
:L    => 左クリック
:R    => 右クリック
:M    => ホイールクリック
:X1   => 拡張ボタン1(戻る)クリック
:X2   => 拡張ボタン2(進む)クリック
:UP   => ホイール上(奥側)回転
:DOWN => ホイール下(手前側)回転
:ANY  => ホイール回転(方向不問)
[シンボル]
マウスカーソルがウィンドウの外にあった場合 → 中に矯正するメソッドを呼ぶ(Window.auto_adjust が真の場合)
ウィンドウの中にあった場合 → シンボル単体で書いたときと同じ動作


更新履歴

  • 2020/12/29 新版公開
  • 2020/11/29 敵を直接マウスで選択できない不具合を修正

  • こんにちは。不具合を発見したのでご報告いたします。 LNS000 組み込み拡張 LNS010 Input拡張 LNS100 プリセット拡張 LNS102 マウス操作 LNS140 マップ/キャラ拡張 の5つを導入した状態で、マップ画面でマウスカーソルをゲームウインドウの外側で大きく動かすなどすると、「 スクリプト 'LNS 140 マップ/キャラ拡張' の 980 行目で IndexError が発生しました。 index -1 too small for array; minimum: 0 」というエラーメッセージが表示され、ゲームが終了してしまいます。 スクリプトは全て最新で、内容は改変していません。 -- 2022-07-26 01:29:40
  • 確認が遅れましたが、対応修正しました。正確には「既に対応済みであったがアップロードを忘れていた」という状態でした…… -- 2022-11-01 15:39:07
  • 対応ありがとうございます!しかし LNS000, 010, 100, 102, 140 の5つを入れた状態で起動直後に「スクリプト 'LNS140 マップ/キャラ拡張' の 1719 行目で NameError が発生しました。 undefined method 'lns102_dash?' for class 'Game_Player'」と表示され、終了します。 -- 2022-12-24 16:39:35
コメント:

すべてのコメントを見る
最終更新:2020年12月29日 09:51