7

中心以外の点を中心に長方形を回転させたい。これまでの私のコードは次のとおりです。

import pygame

pygame.init()
w = 640
h = 480
degree = 45
screen = pygame.display.set_mode((w, h))

surf = pygame.Surface((25, 100))
surf.fill((255, 255, 255))
surf.set_colorkey((255, 0, 0))
bigger = pygame.Rect(0, 0, 25, 100)
pygame.draw.rect(surf, (100, 0, 0), bigger)
rotatedSurf = pygame.transform.rotate(surf, degree)
screen.blit(rotatedSurf, (400, 300))

running = True
while running:
    event = pygame.event.poll()
    if event.type == pygame.QUIT:
        running = False
    pygame.display.flip()

角度を変えて別の回転を得ることができますが、回転は中心についてです。長方形の中心以外を回転点にしたい。

4

5 に答える 5

3

Megaing と skrx に同意します。しかし、彼らの回答を読んだ後、その概念を本当に理解できなかったことも認めなければなりません. それから私はこのゲーム チュートリアル見つけました。

実行した後も疑問が残りましたが、彼らが大砲に使用したイメージがトリックの一部であることがわかりました。

ピボットを中心とした PNG 大砲の画像。

画像は大砲の中心を中心としておらず、ピボット ポイントを中心としており、画像の残りの半分は透明でした。そのエピファニーの後、私はバグの脚に同じものを適用しましたが、今ではすべて正常に機能しています. ここに私のローテーションコードがあります:

def rotatePivoted(im, angle, pivot):
    # rotate the leg image around the pivot
    image = pygame.transform.rotate(im, angle)
    rect = image.get_rect()
    rect.center = pivot
    return image, rect

お役に立てれば!

于 2018-04-23T15:17:42.530 に答える
0

そのためには、独自の関数を作成する必要があると思います。

Vector クラスを作成すると、はるかに簡単になります。

たぶん次のようなもの:

def rotate(surf, angle, pos):
    pygame.transform.rotate(surf, angle)
    rel_pos = surf.blit_pos.sub(pos)
    new_rel_pos = rel_pos.set_angle(rel_pos.get_angle() + angle)
    surf.blit_pos = pos.add(new_rel_pos)

これで、あなたがしなければならないことは、「add()」、「sub()」、「get_angle()」、および「set_angle()」メソッドを持つ Vector クラスだけです。苦労している場合は、グーグルで助けを求めてください。

最終的には、他のプロジェクトで拡張して使用できる素敵な Vector クラスができあがります。

于 2013-03-27T12:30:18.307 に答える