Inputの機能を拡張します。
何度目か分からない車輪の再発明です。
- 基本情報
- 説明
- 概要
- ◆ ホイール操作について
- ◆ 基本仕様
- ◆ メソッド一覧
- ● Mouse.press?(symbol)
- ● Mouse.trigger?(symbol)
- ● Mouse.repeat?(symbol[, interval])
- ● Wheel.roll?([symbol])
- ● Wheel.trigger?([symbol])
- ● Wheel.repeat?([symbol])
- ● Mouse.pos
- ● Mouse.x
- ● Mouse.y
- ● Mouse.distance([dx, dy[, sh]])
- ● Mouse.dir([x, y[, sh]])
- ● Mouse.dir4([x, y[, sh]])
- ● Mouse.dir8([x, y[, sh]])
- ● Mouse.in?(x, y, width, height)
- ● Mouse.in?(rect)
- ● Mouse.set(x, y)
- ● Mouse.clip
- ● Mouse.unclip
- 備考
基本情報
前提スクリプト
挿入位置
説明
概要
標準で取得可能なキー押下状態以外に、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