2016-04-09 177 views
1

我正在製作一個簡單的程序自上而下駕駛模擬器與Python和Pygame。駕駛部分工作正常;向上鍵移動汽車,右側和左側鍵控制它。問題在於圖像的旋轉;它會遍佈整個地方(運行代碼來查看它)。我認爲這是因爲當圖像旋轉時,尺寸發生了變化(因爲它必須是矩形)。當分辨率改變時,位置也會改變。如果有人知道解決這個問題,我會很感激。 car.png - >enter image description herePygame圖像旋轉

import pygame, math 
pygame.init() 

screen = pygame.display.set_mode((600, 500)) 
clock = pygame.time.Clock() 
pygame.display.set_caption('Car Driving') 

def main(): 
    r = 0 
    car = pygame.image.load('images/car.png') 

    while True: 
     for event in pygame.event.get(): 
      if event.type == pygame.QUIT: 
       pygame.quit() 
       quit() 

     r += 3 

     screen.fill((40,40,40)) 
     screen.blit(pygame.transform.rotate(car, r), (200, 100)) 

     pygame.display.update() 
     clock.tick(40) 


main() 
+0

你的問題真的不應該被設置來迫使我們運行你的代碼。即使我們想要我們沒有你的car.png圖片。只需顯示代碼的重要部分並解釋您的問題 – Keatinge

+0

您需要讓問題的圖像(或任何圖像)實際發生。運行代碼比解釋問題要容易得多。但是我會簡化它。 –

回答

1

從pygame的文檔:

除非90度的增量旋轉,圖像將被填充較大以保持新的大小。

這意味着你會得到一個新的Rect對象。文檔中沒有信息,但我認爲原始圖像將位於新Rect的中心。
這意味着如果您將新Rect的位置放在需要的位置,您將獲得預期的結果。

center=(100,200) #Store pos by center 

#In loop: 
rCar=pygame.transform.rotate(car,r) #Do the rotation 
size=rCar.get_size() #Store size 
hSize=[n/2 for n in size] #Half the size 
pos=(center[0]-hSize[0],center[1]-hSize[1]) #Substract half the size 
#from the center 
screen.blit(rCar,pos) #Draw 

讓我解釋一下:

enter image description here

我希望它幫你。

+0

非常感謝!它完美的作品。 –