画面ループ

課題

クラシックな2Dゲーム(『パックマン』タイプの作品など)でよく使われる、プレイヤーキャラクターが画面端から反対側に移動する機能を実装したいです。

解決策

  1. スクリーンサイズ(ビューポート)を取得します。

    @onready var screen_size = get_viewport_rect().size
    

    get_viewport_rect()CanvasItem の派生ノードであればどれでも利用できます。

  2. プレイヤーの座標を比較します。

    if position.x > screen_size.x:
        position.x = 0
    if position.x < 0:
        position.x = screen_size.x
    if position.y > screen_size.y:
        position.y = 0
    if position.y < 0:
        position.y = screen_size.y
    

    注意:この処理ではノードのpositionを使用しています。これは通常、スプライトまたはボディの中心座標を指します。

  3. wrapf() を使用して、シンプルに実装します。

    上記のコードは、GDScriptのwrapf()関数を使用することで簡略化できます。この関数は指定された範囲内で値を「ループ」させます。

    position.x = wrapf(position.x, 0, screen_size.x)
    position.y = wrapf(position.y, 0, screen_size.y)