4

百聞は一見に如かずので、私の質問は「どうすればこれを実現できるか?」です。

ここに画像の説明を入力

直感的に、これは、 で定義されたメイン表示オブジェクト内にサーフェスを定義しpygame.display.set_mode、必要なものをそのサーフェスに描画 (またはブリッティング) し、 で回転させることで実現できると考えましたpygame.transform.rotate。静的ドットは、関数screenによって返されるオブジェクトである以下のコードのオブジェクトに直接描画できると思いました。pygame.display.set_mode

したがって、次のテスト コードを起草しましたが、ローテーションは見られません。私は何を間違っていますか?

#!/usr/bin/env python

import pygame as pg
from pygame.locals import *

SIZE = (800, 600)
BGCOL = (128, 128, 128)
STIMCOL = (80, 255, 80)

screen = pg.display.set_mode((SIZE), HWSURFACE | DOUBLEBUF)
screen.fill(BGCOL)

surf = pg.Surface((200, 200), flags=HWSURFACE)
surf.fill(BGCOL)

pg.draw.rect(surf, STIMCOL, (10, 20, 40, 50))
pg.draw.rect(surf, STIMCOL,  (60, 70, 80, 90))

screen.blit(surf, (100, 100))

pg.display.flip()

running = True
while running:
    pg.transform.rotate(surf, -1)
    pg.display.flip()

もちろん、これを行うためのより良い方法があれば、私はすべて耳にします。おそらく、スプライト グループは良い方法でしょうか? (使ったことないけど…=/)

ありがとう!

4

1 に答える 1

2

コードにいくつかのエラーがあります。

pygame.transform.rotate(surface、angle)は回転したサーフェスを返します

そして、whileループでサーフェスをブリットしていません。したがって、コードは次のようになります。

import pygame as pg
from pygame.locals import *

SIZE = (800, 600)
BGCOL = (128, 128, 128)
STIMCOL = (80, 255, 80)

screen = pg.display.set_mode((SIZE), HWSURFACE | DOUBLEBUF)
screen.fill(BGCOL)

surf = pg.Surface((200, 200), flags=HWSURFACE)
surf.fill(BGCOL)

pg.draw.rect(surf, STIMCOL, (10, 20, 40, 50))
pg.draw.rect(surf, STIMCOL,  (60, 70, 80, 90))

screen.blit(surf, (100, 100))

pg.display.flip()

running = True
while running:
    surf = pg.transform.rotate(surf, -1) # updating rotation on the surface
    screen.blit(surf, (100, 100)) #bliting the resulting image every frame
    pg.display.flip()

編集:pygameのドキュメントでコメントを確認した後、90度以外の回転で画像のサイズを変更すると、多くの問題が発生します。回転を追跡し、画像を最初から角度を増やして回転させる必要があります。

于 2012-12-05T19:34:55.167 に答える