2012-12-05 64 views
4

一張圖片勝過千言萬語,所以最終,我的問題是「我怎樣才能做到這一點?」:我如何可以旋轉一組pygame的對象(無論是rects或圖像)

enter image description here

直覺上,我認爲這可以通過在pygame.display.set_mode定義的主顯示對象內定義一個表面,在該表面上繪製(或blitting)任何需要的表面,然後用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() 

當然,如果有更好的方法來做到這一點,我全部都是耳朵。也許精靈團隊是一個很好的出路? (雖然我以前從未使用過...... = /)

謝謝!

回答

2

你在代碼中有幾個錯誤:

pygame.transform.rotate(面,角)返回一個旋轉表面

,你是不是在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度以外的任何圖像的縮放。您應該跟蹤旋轉,並以增加的角度從頭開始旋轉圖像。

+0

這是朝正確的方向邁出的一步,但我跑了代碼和rects從屏幕滾出,永遠不會返回...... =( – blz

+0

正如我在編輯中所說的,如果旋轉不是90度,你可以在http://www.pygame.org/docs/ref/transform.html的旋轉註釋中找到解決這個問題的代碼 –