2016-04-09 31 views
1

私はPythonとPygameを使ってシンプルなプログラムトップダウン運転シミュレータを作っています。駆動部は正常に動作しています。上のキーは車を動かし、右と左のキーはそれを操縦する。画像の回転に問題があります。それは場所全体を移動します(コードを実行して見てください)。画像が回転するとサイズが変わる(長方形でなければならないので)と思う。解像度が変わると、位置も変わります。誰かがこれを回避する方法を知っていれば、私は本当にそれを感謝します。 car.png - pygameのドキュメントから>enter image description herePygame Image Rotation

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

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

ありがとう!それは完全に動作します。 –