2016-04-09 13 views
1

Ich mache ein einfaches Programm Top-Down-Fahrsimulator mit Python und Pygame. Der antreibende Teil funktioniert gut; Mit der Aufwärtstaste wird das Auto bewegt und mit der rechten und der linken Taste wird es gesteuert. Das Problem liegt in der Rotation des Bildes; Es bewegt sich überall hin (führen Sie den Code aus, um es zu sehen). Ich denke, es ist, weil wenn sich das Bild dreht, die Größe geändert wird (da es ein Rechteck sein muss). Wenn sich die Auflösung ändert, ändert sich auch der Standort. Wenn jemand einen Weg kennt, würde ich es sehr schätzen. car.png ->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

Ihre Frage sollte wirklich nicht eingerichtet werden, um uns zu zwingen, Ihren Code auszuführen. Auch wenn wir wollten, haben wir kein Auto.png image. Zeigen Sie einfach die wichtigen Teile des Codes und erklären Sie Ihr Problem. – Keatinge

+0

Sie müssen das Bild (oder ein Bild) haben, damit das Problem tatsächlich auftritt. Das Ausführen des Codes ist viel einfacher als das Erklären des Problems. Aber ich werde es trotzdem vereinfachen. –

Antwort

1

Von PyGame docs:

Es sei denn, um 90-Grad-Schritten drehen, wird das Bild aufgefüllt größer die neue Größe zu halten.

Das bedeutet, dass Sie ein neues Rect-Objekt erhalten. Es gibt keine Informationen in der Dokumentation, aber ich denke, dass das Originalbild in der Mitte des neuen Rect steht.
Das würde bedeuten, dass Sie das erwartete Ergebnis erhalten, wenn Sie die Position des neuen Rect an der benötigten Position platzieren.

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 

Lassen Sie mich erklären:

enter image description here

Ich hoffe, dass es Ihnen geholfen.

+0

Vielen Dank! Es funktioniert perfekt. –