LNS005 Input拡張

Inputの機能を拡張します。何度目か分からない車輪の再発明です。





基本情報

前提スクリプト


挿入位置



説明

概要

 標準で取得可能なキー押下状態以外に、Win32APIにおける仮想キーボードで取得可能な全てのキー状態を利用できるようになります。具体的には、各英数キー、F5-8以外のファンクションキーマウスの各ボタンなどです。

◆ ホイール操作について

 このスクリプト単体ではマウスホイールによる操作は受け付けておりません。半生様のいろいろマウス入力に含まれるHNDINPUT.dllを System フォルダに入れておくと、ホイールによる操作にも対応できるようになります。「いろいろマウス入力」のスクリプト本体は必要ありません(VX Aceには対応していません)。

◆ 基本仕様

 Input.trigger? などのメソッドに標準では定義されていないシンボル(:N など)を渡すと、自動的に拡張モジュールで判定がなされます。
標準で取得可能なシンボルのうち、:A, :B, :C, :X, :Y, :Z, :L, :R はツクールのコンフィグで設定された「ボタン」として扱われ、Aキー などが取得できません。それらのキーを取得したい場合、先頭に'KEY'を付けて :KEYA などとしてください。
逆に、例えば :KEYD などで標準取得可能なキー(この場合は Z ボタン)を直接指定すると、コンフィグで他のキーにもアサインされていた場合でも取得できません。
 Input.repeat?(:LEFT, 2) のように呼び出すと、通常6フレームのリピート間隔を第2引数(この例では 2)に応じたフレーム数で呼び出すことができます。これにより、リピート間隔を呼び出し側で任意に設定することができます。ただし、この機能を使う場合は標準のシンボル(:C で Zキー を取得するなど)が使えません。
 マウスカーソルはシステム標準のものが使われます。特殊なマウスカーソルを表示させたい場合はLNS008a マウスカーソルを導入してください。
マウスの状態は、Input.trigger?(:LBUTTON) などで直接取得するか、Mouse.trigger?(:L)など、Mouse モジュールの関数を使います。Mouse モジュールの関数は下記のものが用意されます。

◆ メソッド一覧

● Mouse.press?(symbol)

● Mouse.trigger?(symbol)

● Mouse.repeat?(symbol[, interval])

 使い方は基本的に Input モジュールの同名メソッドと同じですが、引数に指定できるシンボルは、:L, :R, :M, :X1, :X2, :UP, :DOWN, :ANY のいずれかとなります。
 :L は左クリック、:R は右クリック、:M はホイールクリック、:X1 と :X2 はそれぞれマウスに備わる特殊ボタン(「戻る」と「進む」の場合が多い)を取得します。
最後の3つは、Wheel モジュールの同名メソッド(press? は roll?)を呼びます。

● Wheel.roll?([symbol])

 マウスホイールの状態を取得します。roll? は press? に相当します。引数には、:UP, :DOWN, :ANY のいずれかを指定します。省略時は :ANY になります。
 :UP は上方向(奥側)への回転、:DOWN は下方向(手前側)への回転、:ANY はいずれかの方向への操作を取得します。

● Wheel.trigger?([symbol])

 基本的には Wheel.roll? と同じですが、最後に操作されてから規定フレームの間、操作が行われなかった場合のみ再度フラグが立ちます。

● Wheel.repeat?([symbol])

 基本的には Wheel.roll? と同じですが、最初に操作されてから規定フレーム経過するまでは回し続けても反応しません。Input.repeat? と異なり検出間隔を変更することはできません。

● Mouse.pos

 マウスカーソルの現在の位置(クライアント領域左上からの相対座標)を取得します。戻り値は [x, y] の配列です。

● Mouse.x

● Mouse.y

 マウスカーソルの X 座標(クライアント領域左上からの相対座標)及び Y 座標を取得します。
それぞれ Mouse.pos[0]、Mouse.pos[1] と同じです。

● Mouse.distance([dx, dy[, sh]])

 X 座標の差分 dx、Y 座標の差分 dy から距離を算出して返します。
sh には最低距離を指定できます。値の種類によって距離の計算方法が変わります。
数値       (例: 16       #=> そのまま計算してから 16 を引く       )
1要素の配列(例: [16]     #=> dx と dy からそれぞれ 16 を引いて計算)
2要素の配列(例: [16, 24] #=> dx から 16、dy から 24 を引いて計算  )
省略時は sh = 0 として扱われます。
 引数を全て省略した場合は、最後に Mouse.distance(dx, dy, sh) が呼ばれたときの値をそのまま返します。一度も呼ばれていなかった場合は 0 が返ります。
Mouse.distance(3, 4, 2)      #=> 3        [Math.hypot(3, 4) - 2]
Mouse.distance(3, 4, [2])    #=> 2.236... [Math.hypot(3 - 2, 4 - 2)]
Mouse.distance(3, 4, [2, 3]) #=> 1        [Math.hypot(3 - 2, 4 - 3)]

● Mouse.dir([x, y[, sh]])

 ゲーム画面(クライアント領域)の座標(x, y)からの方向を取得します。x と y は省略した場合画面の中心が使われます。最初に Mouse.distance(x, y, sh)を呼び、基準位置からの距離を計算します。
 戻り値は距離を 1 としたときの [X 座標, Y 座標] の配列です。基準位置からの距離(Mouse.distance)がゼロと判定された場合は [0, 0] が返ります。

● Mouse.dir4([x, y[, sh]])

● Mouse.dir8([x, y[, sh]])

 基準座標(x, y)からの方向を、テンキーに応じた数値(Mouse.dir4 では 2, 4, 6, 8、Mouse.dir8 では 1, 2, 3, 4, 6, 7, 8, 9)で返します。基準位置からの距離(Mouse.distance)がゼロと判定された場合は 0 が返ります。

● Mouse.in?(x, y, width, height)

● Mouse.in?(rect)

 マウスカーソルが引数の矩形範囲内に収まっているかどうかを判定します。

● Mouse.set(x, y)

 マウスカーソルを(x, y)の位置に移動します。座標はクライアント領域左上からの相対位置で指定します。ウィンドウの範囲外に設定しようとすると無視されます。

● Mouse.clip

 マウスの移動範囲をクライアント領域の内側に制限します。

● Mouse.unclip

 マウスの移動範囲制限を解除します。


備考

再定義されるメソッド

なし

設定項目

Input_Repeat_Init<初期値:24>
キーが最初に押されてから、次にリピート判定が発生するまでのフレーム数。初期値の場合、まず1フレーム目(キーを押した瞬間)に1回目のリピート判定が発生し、24フレーム目(最初の発生から23フレーム後)に2回目のリピート判定が発生する。
Input_Repeat_Count<初期値:6>
2回目のリピート判定が発生してから、以降のリピート判定が発生する間隔。初期値の場合、24フレーム目に2回目のリピートが発生したあと、5フレームおき(30フレーム目、36フレーム目、42フレーム目...)にリピート判定が発生するようになる。
Wheel_Repeat_Init<初期値:24>
ホイールが最初に動かされてから、次にリピート判定が発生するまでのフレーム数。発生タイミングはInput_Repeat_Init参照。ホイールの場合、トリガー判定が発生したあと、この期間が過ぎるまでは再びトリガー判定が発生しない。
Wheel_Repeat_Count<初期値:3>
2回目のリピート判定が発生してから、以降のリピート判定が発生する間隔。発生タイミングはInput_Repeat_Count参照。


コメント:

すべてのコメントを見る
最終更新:2019年04月07日 13:05