PyGameでベクトルと物理演算を使用していくつかの操作を行っていますが、デフォルトの座標系は不便です。通常、(0, 0)
ポイントは左上隅にありますが、原点は左下隅にあるほうがいいです。描画する必要のあるものをすべて変換するのではなく、座標系を変更したいと思います。
PyGameの座標系を変更してこのように動作させることは可能ですか?
PyGameでベクトルと物理演算を使用していくつかの操作を行っていますが、デフォルトの座標系は不便です。通常、(0, 0)
ポイントは左上隅にありますが、原点は左下隅にあるほうがいいです。描画する必要のあるものをすべて変換するのではなく、座標系を変更したいと思います。
PyGameの座標系を変更してこのように動作させることは可能ですか?
残念ながら、pygameはそのような機能を提供していません。これを行う最も簡単な方法は、座標を変換する関数を用意し、オブジェクトを描画する直前にそれを使用することです。
def to_pygame(coords, height):
"""Convert coordinates into pygame coordinates (lower-left => top left)."""
return (coords[0], height - coords[1])
height
これにより、座標が取得され、ウィンドウの高さ、およびcoords
オブジェクトの左上隅が指定された場合に、描画用のpygameの座標に変換されます。
代わりに、オブジェクトの左下隅を使用するには、上記の式を使用して、オブジェクトの高さを減算します。
def to_pygame(coords, height, obj_height):
"""Convert an object's coords into pygame coordinates (lower-left of object => top left in pygame coords)."""
return (coords[0], height - coords[1] - obj_height)
レンダリングしようとしているオブジェクトが垂直方向に対称である場合(長方形のように)、次のように、画面を反転して座標系を左下にすることができます。
display_surface = pygame.display.get_surface()
display_surface.blit(pygame.transform.flip(display_surface, False, True), dest=(0, 0))
同じことを水平方向に右上/右下に行うことができます。重要な方法はここに文書化されています: