2013-09-17 9 views
0

Я прочитал несколько других сообщений о вращении изображения вокруг центральной точки, но мне еще предстоит выяснить это. Я даже копировал одно из решений, размещенное по другому вопросу, и это не сработало.pygame вращение вокруг центральной точки

Это мой код

def rotate(self, angle): 
    self.old_center = self.surface.get_rect().center 
    self.surface = pygame.transform.rotate(self.surface, angle) 
    self.surface.get_rect(center = self.old_center) 

это внутри класса, который содержит поверхность.

Когда я вызываю этот метод, изображение вращается, а также переводит и искажается.

ответ

2

Вы не назначая новый прямоугольник, вы должны сделать что-то вроде:

self.rect = self.surface.get_rect(center = self.old_center) 

И вы всегда должны сохранить оригинальную поверхность и вращать от оригинала, таким образом искажения не накапливаются при повороте несколько раз ,

Update

Если вы не хотите, чтобы следить за rect объекта, вы можете делать это каждый раз, когда вы Blit. Если вы держите координаты center.

Пример:

rect = object.surface.get_rect() 
rect.center = object.center 
display.blit(object.surface, rect.topleft) 
+0

Я был под впечатлением, что «self.surface = pygame.transform.rotate (self.surface, угол)» неявно присвоен новый повернутый прямоугольник, так как прямоугольник является свойством поверхности , Мой класс не содержит свойство rect, я использую surface.get_rect() каждый раз. – niebula

Смежные вопросы