Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
1
Help us understand the problem. What are the problem?
@hta393939

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

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 を基礎から理解したい方は以下の記事がとてもおすすめです。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
1
Help us understand the problem. What are the problem?