Welcome to my site

yield関数

Sokoban in the ruinsはグリッド単位で主人公が動くようになっています。
倉庫番というゲームの資質上、この移動方法が最適なのですが、主人公が「ポン・ポン」と移動する動きを滑らかにしたいと思い、以下のような工夫をしました。

使った関数はyield関数というもので



 yield(get_tree().create_timer(0.12), "timeout")
 これで0.12秒間待つことになります。

※Godot4ではawait get_tree().create_timer(秒).timeout という使い方になります。

このyield関数を使って、Playerを8ピクセルずつ4回、合計32ピクセル(1グリッド)移動させます。

for _i in range(0,4,1): # 4回ループ

    position += _velocity * 8     # positionは主人公のワールド座標
                                                # _velocityには(1.0)とか(0,-1)のような移動方向が入っています。

    _spr.frame = _get_anim_id(int(_anim_timer*4)%4) # 移動のアニメーションスプライト

    yield(get_tree().create_timer(0.05), "timeout") # 0.05秒の時間待ち

これで0.05秒ごとに8ピクセル主人公が移動します