マウス追跡 †
マウスの位置を基点にして常にマウスのそばから離れない、
というようなものを考えてみました。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
| screen 640,480,4
title "マウス追跡"
mes "■"
ginfo 7
cls
*mouse_track
repeat
await 1
px=nx :py = ny
if mousex+prmx>winx : nx = winx-prmx : else nx = mousex
if mousey+prmy>winy : ny = winy-prmy : else ny = mousey
if (nx=px)&(ny=py) : continue
color 255,255,255
boxf px,py,px+prmx,py+prmy
color 0,0,0
pos nx,ny : mes "■"
loop
stop
|
- 3〜5行目は初期化です。
- 画像の変わりに描画した■の大きさを取得し、画面をクリアします。
- 10〜13行目は座標の更新です。
- マウスの座標を保存し(PrevX,PrevY)、新しいマウスの座標を設定します(NextX,NextY)。
13行目でマウスの座標が変わっていない場合に無駄な描画を避けるためにループ先頭に戻ります。
- 14〜17行目が描画処理です。
- 以前の座標の■を消してから、新しい位置に■を描画します。
+
| | マウス追跡
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
| title "マウス追跡"
mes "■"
characterSizeX = ginfo_mesx
characterSizeY = ginfo_mesy
WINX = ginfo_winx
WINY = ginfo_winy
*mouse_track
repeat
await 1
nx = limit(mousex, 0, WINX - characterSizeX)
ny = limit(mousey, 0, WINY - characterSizeY)
if (nx == px)&(ny == py) : continue
color 255, 255, 255
boxf px, py, px + characterSizeX, py + characterSizeY
color 0, 0, 0
pos nx, ny : mes "■"
px = nx : py = ny
loop
|
|
マウスを非表示にすればオリジナルのカーソルとしての動作も可能だと思っています。
またドローイングも同じ原理で表現可能だと思っています。
- HSP入門書・サイトにも載ってるのかな^^; -- kz3
- 早速のご利用どうもですw この機会に利用者増えるといいんですけどね。 -- Charlotte
- いい感じです。すごくw -- Charlotte
- 質問いいですかね。repeatの時のawaitって上にあるのと下にあるのとどっちがいいんでしょう? -- Charlotte
- 遅ればせながら間違い等ありましたら指摘・訂正お願いします。m_ _m -- kz3
- ツールチップはマウスが止まると出てきて、動くと消えるのでちょっと違う感じがします。mouseでカーソル消して簡易オリジナルカーソルがよさそう。 -- GENKI?
- ここのスクリプトにredrawを付け足そうとして書き直してるうちに別のものが出来ちまいましたorz→ペイント -- GENKI?
- 今さっき調べてみてはじめて知りました。tooltipなんて便利なものがあったのね…。 -- GENKI?
- 処理内容が大事?
- 作者の好みの場合と、上と下とで動作に若干影響する場合とがあると思っています。
今回は後者で■を描画する前に最新のマウスの座標を取得(mousex,mouseyの更新)するためにawaitを先に持ってきました。 -- kz3
- continueを使う時は!
- continueを使う時はwait/awaitを先に持ってこないと、repeat〜continue間で「タスクが回らない」(←理解が乏しいです)という状態になるかも知れません。--kz3