GetMouseInputLog2

マウスのボタンが押されたり離されたりした履歴を取得する

val = GetMouseInputLog2(Button, ClickX, ClickY, LogType)

Button : 押されたり離されたりしたボタンの値( MOUSE_INPUT_LEFT など )を
保存するint型変数のアドレス
ClickX, ClickY : ボタンが押されたり離されたりした時のマウスカーソルのX座標とY座標を
保存するint型変数のアドレス
LogType : ボタンが押されたのか又は離されたのかの情報( MOUSE_INPUT_LOG_DOWN など )を
保存するint型変数のアドレス
LogDelete : ログの情報を削除するかどうかのフラグ( TRUE:削除する FALSE:削除しない )

(プラグイン / モジュール : DxLibW)

解説

マウスのボタンが押されたり離されたりしたときの情報( 押された or 離されたボタン、押された or 離されたときの座標、押されたのか又は離されたのかの情報 )を取得します。

前回・若しくはソフト起動から始めての GetMouseInputLog2 呼び出しまでの間にマウスのボタンが押されたり離されたりしていなかった場合は -1が返り、
その場合は Button、 ClickX、 ClickY、 LogType で渡す変数のアドレスにも何も値を代入しません。

前回・若しくはソフト起動から始めての GetMouseInputLog2 呼び出しまでの間にマウスのボタンが押されたり離されたりしていた場合は 0が返り、
押された or 離されたボタン( MOUSE_INPUT_LEFT 等、ボタンについて詳しくは GetMouseInput の解説を参照してください )が Button に、
ボタンが押された or 離されたときのマウスカーソルの座標が ClickX、 ClickY に、ボタンが押された( MOUSE_INPUT_LOG_DOWN )のか又は

離された( MOUSE_INPUT_LOG_UP )のかの情報が LogType に代入されます。

一見 GetMousePointGetMouseInput の組み合わせがあればこの関数は必要が無い気がしますが、

この関数は

1.ボタンが押されたり離されたり瞬間の座標を取得できる

2.ボタンが押されたり離されたりした情報が蓄積されている

の2点があるので、GetMousePointGetMouseInput の組み合わせでは代用できない関数となっています。

まず、GetMousePointGetMouseInput を組み合わせたクリック検知とクリック座標取得の問題として

・クリックの取りこぼしが発生する

プログラムの処理負荷が高く十分なフレームレート( 画面の更新頻度 )を確保できない場合は

プログラムが GetMouseInput で入力状態を調べる間隔が長くなるため、GetMouseInput で入力状態を

調べる間隔より短い時間でプレイヤーがマウスのボタンを押して離すとプログラムはプレイヤーが

マウスのボタンを押したことを検知することができない。

・クリック座標のズレが発生する

同じく処理負荷が高く十分なフレームレートを確保できない場合、GetMouseInput によりマウスの

クリックを検出した後 GetMousePoint でマウスカーソルの座標を取得すると、実際にプレイヤーが

クリックした座標からズレが発生することがあります。( 低いフレームレートでのマウスクリック

検出の間にマウスカーソルが移動してしまっている場合があるので )


の二つがあります。

対して、GetMouseInputLog2 では『クリックの取りこぼしが発生する』に対しては『マウスのボタンが押されたり離されたりした情報が蓄積される』ので取りこぼしの心配が無く、
『クリック座標のズレが発生する』に対しては『マウスのボタンが押されたり離されたりした瞬間の座標が取得できる』ので、
主にフレームレートが低い場合に発生するマウスクリックの問題を解決することができます。

蓄積されたクリック情報を取得する方法は『戻り値が-1になるまで何度もこの関数を呼ぶ』となります。

この関数の戻り値が0だった場合は蓄積されたクリック情報がまだある可能性がありますので、
戻り値が-1( マウスのボタンが押されたり離されたりした情報が無かった )になるまで繰り返し GetMouseInputLog2 を呼ぶというわけです。

尚、第5引数の LogDelete を FALSE にした場合は蓄積された『ボタンが押されたり離されたりした情報』を削除しないので、
LogDelete を FALSE にして呼ぶと、何度も同じ『ボタンが押されたり離されたりした情報』が返ってきます、
なので LogDelete は『ボタンが押されたり離されたりした情報』を削除したくない場合を除いて TRUE を渡すようにしてください。

戻り値:
  0:ボタンが押されたり離されたりした情報を取得した

情報

プラグイン / モジュールDxLibW
バージョン3.24f
作成日2026/04/12
著作者DxLib: Takumi Yamada / HSP binding: IronHSP Project
URLhttps://dxlib.xsrv.jp/
備考hspdxlib.as をインクルードして使用
タイプDxLib ゲームライブラリ
グループDxLib 入力
対応環境
  • Windows 版 HSP
hs ファイルhsphelp\hspdxlib.hs