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 |
---|
5つのボックスが右へ移動 |
実行結果1-2 |
---|
右へ移動しつづけるフレーム数が異なる |
次のサンプルは無限フレーム待ちにして左クリックするごとに次の動きに続く動作です。
#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 |
---|
左クリックするごとに移動方向が変わる |
このサンプルでは左クリックするごとに work の x成分 を 0 にして event_wait の待機を解除しましたが、他にもなにかの条件判定を満たしたとき(自キャラがある地点に到達した、など)にイベント動作を次へ移行するような使い方ができます。
参考
HSP3.5 hgimg4 を基礎から理解したい方は以下の記事がとてもおすすめです。