私のゲームはプラットフォーム ゲームです。プレーヤーが中心から X ピクセル離れたときに左または右に移動するようにします。
pygameにはカメラを動かすものがないことを理解しています。
プレーヤーが中心から X ピクセル離れたポイントに到達したら、プレーヤーの動きを停止し、地形を反対方向に移動させて、カメラの動きのように動作する可動地形の錯覚を表示します。
カメラをプレイヤーの中心に配置するための非常に基本的な方法は、プレイヤーが常にカメラの中心にくるように、描画するものすべてをオフセットすることです。私自身のゲームでは、関数を使用して座標を変換します。
def to_pygame_coords(coords):
# move the coordinates so that 0, 0 is the player's position
# then move the origin to the center of the window
return coords - player.position.center + window.position.center
これを拡張してプレーヤーに絶対に配置しないようにするには、代わりにウィンドウをボックスの中央に配置します。次に、ボックスの中心を更新して、プレーヤーがボックスを離れた場合に、ボックスがプレーヤーと一緒に移動するようにします (したがって、カメラが移動します)。
疑似コード (負の座標についてはテストされていません):
BOX_WIDTH = 320
BOX_HEIGHT = 240
box_origin = player.position.center
def update_box(player_coords):
if player_coords.x - box_origin.x > BOX_WIDTH:
box_origin.x = player_coords.x - BOX_WIDTH
elif box_origin.x - player_coords.x > BOX_WIDTH:
box_origin.x = player_coords.x + BOX_WIDTH
if player_coords.y - box_origin.y > BOX_HEIGHT:
box_origin.y = player_coords.y - BOX_HEIGHT
elif box_origin.y - player_coords.y > BOX_HEIGHT:
box_origin.y = player_coords.y + BOX_HEIGHT
def to_pygame_coords(coords):
# move the coordinates so that 0, 0 is the box's position
# then move the origin to the center of the window
return coords - box_origin + window.position.center
画面を横切ってスクロールすることになっているすべてのものに追加される xscroll と呼ばれるものを作ることができます。次に、中心から一定の距離に到達したら、プレイヤーの移動速度をその位置に追加する代わりに、xscroll から移動速度を加算または減算します。これにより、キャラクターが移動するのと同じ速度ですべてが非常にスムーズに戻ります。私はこれをすべてのゲームで使用していますが、問題が発生したことはありません。
視覚化:
視差スクロール: http://blog.shinylittlething.com/wp-content/uploads/2009/08/parallax.png (通常、距離を表示するために、異なる速度でスクロールする複数のレイヤーがあります。)
2D タイルマップのスクロール: http://mikecann.co.uk/wp-content/uploads/2011/11/tm.png
紙に座標を描く / これらの画像は問題を視覚化するのに役立ちます。