1

私はゲームを作っていますが、基本的なカメラ追跡アルゴリズムの助けを探しています。

  • 320x480のサイズのウィンドウがあるとします。
  • 座標がx、yのプレーヤーもあります。
  • ユーザーは矢印キーを使用してプレーヤーを移動できます。
  • カメラはプレーヤーの座標に従います。[カメラの座標は画面がある場所です]。したがって、camera.x=player.xおよびcamera.y=player.y

今私が得ている問題は、プレイヤーが部屋の端に到達すると、部屋の「外」を見ることができるということです。したがって、理想的には、カメラが部屋の端に近づいたときにカメラの動きを停止する必要があります。

この問題に効率的に取り組む方法がわかりません。これはゲームの一般的な機能のようです。どんな助けでも素晴らしいでしょう。

私のコード、それは機能しません..本当に、ビューはランダムに奇抜になります*:

#bi_currentwindow.layout.x = -(top left x corner of window)
#bi_currentwindow.layout.y = -(top left y corner of window)
#bi_bg_size= total room (or world) size

            diff=(object.x-Window.size[0]/2)
            if diff<0:
                bi_currentwindow.layout.x = object.x+diff
            else:
                diff=(object.x+Window.size[0]/2)-bi_bg_size[0]
                if diff<0:
                    bi_currentwindow.layout.x = -object.x+Window.size[0]/2.0
            diff=(object.y-Window.size[1]/2)

            if diff<0:
                bi_currentwindow.layout.y = diff+Window.size[1]/2
            else:
                bi_bg_size=centralVarTransfer.bi_bg_size
                diff=bi_bg_size[1]-(object.y+Window.size[1]/2)

                if diff>0:
                    bi_currentwindow.layout.y = -object.y+Window.size[1]/2.0
4

1 に答える 1

1

2Dゲームをするときはいつでも、プレーヤーを中央の画面にして背景を移動するのが好きです。これにより、次のことが可能になります。部屋の側面が画面サイズ>または<の場合は、画面を移動して、画面の側面が画面サイズと等しくなるようにします。

しかし、カメラを持っていて、その方法を使用したい場合:計算は非常に簡単なはずです。何かのようなもの:

//assuming origin is the center of the object
if ( camera.xPosition - (camera.width / 2) < room.x - (room.width / 2))
     camera.xPosition  = room.x - (room.width / 2) + (camera.width / 2)

私のコードは少しずれているかもしれませんが(そして部屋の片側だけ)、概念的には、オフセットによって変更されたカメラの位置(カメラの幅または高さに基づく)が、によって変更された部屋の位置よりも大きいか小さいかを確認していますオフセット(部屋の幅または高さに基づく)。

2枚のインデックスカードがあり、カメラのように1枚を動かすと、コーディングしようとしている境界条件を概念化するのに役立ちます。

于 2012-11-14T20:47:07.787 に答える