Edited at

HSP3.5 HGIMG4 でイベント待ちを制御する

More than 1 year has passed since last update.


event_wait の引数に -1 を指定する

HSP3.5 HGIMG4 の event_wait の引数として、待ちフレーム数を指定する代わりに -1 を指定すると、work の x成分を参照して待ちフレーム数を決定するようになります。これによって1種類のイベントを作成しておきオブジェクトごとに work の x成分を変えることで動作を変えることができます。

また event_wait に -1 を指定し、その参照先である work の x成分に -1 を指定すると無限に待つ動作となります(多分)。

work の x成分にフレーム数を指定して同じイベントで異なる時間待つサンプルコードは以下のようになります。

#include "hgimg4.as"

gpreset
setcls CLSMODE_SOLID, 0x000033

// イベント1種類
newevent ev
event_addpos ev, 0.1, 0,0
event_wait ev, -1

repeat 5
gpbox id, 10, 0x00cc33
setpos id, -20, double(2 - cnt) * 12.0, 0
setwork id, (cnt + 1) * 120, 0, 0
setevent id, ev
loop

repeat
getreq fps, SYSREQ_FPS

redraw 0
gpdraw
pos 16,16
color 224,224,224
font "",48
mes strf("%2d [fps]", fps)
redraw 1
await 1000/60
loop

実行結果1-1

z10wait1.png

5つのボックスが右へ移動

実行結果1-2

z10wait2.png

右へ移動しつづけるフレーム数が異なる

次のサンプルは無限フレーム待ちにして左クリックするごとに次の動きに続く動作です。

#include "hgimg4.as"

gpreset
setcls CLSMODE_SOLID, 0x000000

newevent ev
event_addpos ev, 0.1, 0, 0
event_wait ev, -1

event_setwork ev, -1, 0, 0
event_addpos ev, 0, -0.1, 0
event_wait ev, -1

event_setwork ev, -1, 0, 0
event_addpos ev, -0.1, 0, 0
event_wait ev, -1

event_setwork ev, -1, 0, 0
event_addpos ev, 0, 0.1, 0
event_wait ev, -1

event_setwork ev, -1, 0, 0
event_jump ev, 0

gpbox id, 10, 0x00ccff
setpos id, -14, 14, 0
setwork id, -1, 0, 0
setevent id, ev

repeat
getreq fps, SYSREQ_FPS

stick key
if key & 256 {
setwork id, 0, 0, 0
}

redraw 0
gpdraw
pos 16,16
color 224,224,224
font "",48
mes strf("%2d [fps]", fps)
redraw 1
await 1000/60
loop

実行結果2

z10wait3.png

左クリックするごとに移動方向が変わる

このサンプルでは左クリックするごとに work の x成分 を 0 にして event_wait の待機を解除しましたが、他にもなにかの条件判定を満たしたとき(自キャラがある地点に到達した、など)にイベント動作を次へ移行するような使い方ができます。


参考

HSP3.5 hgimg4 を基礎から理解したい方は以下の記事がとてもおすすめです。