こんな感じでしょうか?
(少々見づらくて申し訳ありません)
#module "my_mouse"
#deffunc mouse_init
dim i
frame(0) = (ginfo(10) - ginfo(12)) / 2
frame(1) = (ginfo(11) - ginfo(13) - frame(0))
return
; マウスカーソルのX座標
;
#defcfunc mus_x
return (ginfo(0) - ginfo(4) - frame(0))
; マウスカーソルのY座標
;
#defcfunc mus_y
return (ginfo(1) - ginfo(5) - frame(1))
; 現在のマウスの座標位置 デバッグ表示
;
#defcfunc mus_pos_
return strf("mouse(%d, %d)", mus_x(), mus_y())
;###########################################################
; マウス座標位置の判定
; val = musxy(posary, mode, size)
; [array] posary : カレントX, Y座標及び横幅と高さ
;
#defcfunc local musxy_ array posary, int mode, double size
if (size = 0.0) {i = 1.0} else {i = size}
if mode {
mytmp = (posary.0 - (i * posary.2 * 0.5)), (posary.1 - (i * posary.3 * 0.5))
chk.0 = (mytmp.0 <= mus_x())
chk.1 = (mytmp.1 <= mus_y())
chk.2 = (mus_x() <= (mytmp.0 + (i * posary.2)))
chk.3 = (mus_y() <= (mytmp.1 + (i * posary.3)))
}
else {
chk.0 = (posary.0 <= mus_x())
chk.1 = (posary.1 <= mus_y())
chk.2 = (mus_x() <= (posary.0 + posary.2))
chk.3 = (mus_y() <= (posary.1 + posary.3))
}
return (chk.0 & chk.1 & chk.2 & chk.3)
;###########################################################
; マウス座標位置の判定
; val = musxy(posary, mode, size)
; [array] posary : カレントX, Y座標及び横幅と高さ
; [ int ] mode : 座標基準点中心モード (= 0, 0:左上 / 1:中心)
; [double] size : 描画サイズ連動用
;
#define global ctype musxy(%1,%2=0,%3=0.0) musxy_@my_mouse(%1,%2,%3)
#global
//////////////////// 以下サンプル ////////////////////
screen 0, 640, 460
mouse_init
; 座標位置(200, 300)の点から幅300,高さ75の矩形範囲内
;
m_pos = 200, 300, 300, 75
; フラグ管理用
; (0) : マウス座標範囲内外判定
; (1) : 処理実行判定
;
dim i, 2
*main
await (1000.0 / 20.0) : title strf("i = %d, %d // %d // ", i(0), i(1), mycnt) + mus_pos_()
rgbcolor 0xFFFFFF : boxf
rgbcolor 0x555555 : boxf m_pos(0), m_pos(1), ( m_pos(0) + m_pos(2) ), ( m_pos(1) + m_pos(3) )
rgbcolor 0x000000 : pos mus_x(), mus_y()
if musxy(m_pos) {i(0) = 1 : mycnt++ : mes "ここだよ"} else {i(0) = 0}
; マウス範囲内 かつ まだ鳴らしていない
if ( i(0) & (i(1) = 0) ) {i(1) = 1 : pos 0, 0 : mes "にゃあぁ〜"}
; マウス範囲外 かつ 過去に鳴らした
if ( (i(0) = 0) & i(1) ) {i(1) = 0}
goto *main