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ピクセル主人公が移動します。
倉庫番というゲームの資質上、この移動方法が最適なのですが、主人公が「ポン・ポン」と移動する動きを滑らかにしたいと思い、以下のような工夫をしました。
使った関数は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ピクセル主人公が移動します。