使用pygame.transform.rotate()时出现奇怪的移位

时间:2012-05-18 01:20:55

标签: python pygame

def rotate(self):
    #Save the original rect center
    self.saved_center=self.rect.center

    #Rotates a saved image every time to maintain quality
    self.image=pygame.transform.rotate(self.saved_image, self.angle)

    #Make new rect center the old one
    self.rect.center=self.saved_center

    self.angle+=10

当我旋转图像时,尽管我正在保存旧的矩形中心并使旋转的矩形中心变为旧的矩形,但它仍然有一种奇怪的移动。我希望它在广场的中心旋转。

这是它的样子: http://i.imgur.com/g6Os9.gif

2 个答案:

答案 0 :(得分:2)

你只是在计算新的矩形错误。试试这个:

def rotate(self):
    self.image=pygame.transform.rotate(self.saved_image, self.angle)
    self.rect = self.image.get_rect(center=self.rect.center)
    self.angle+=10

它告诉新的矩形在原始中心周围居中(中心在这里永远不会改变。只是不断传递)。

问题是self.rect从未被正确更新。你只是改变了中心值。随着图像的旋转,整个矩形会发生变化,因为它会变大和缩小。所以你需要做的就是每次都完全设置新的矩形。

self.image.get_rect(center=self.rect.center)

这会计算一个全新的矩形,同时围绕给定的中心。在计算位置之前,将中心设置在矩形上。因此,你得到一个正确围绕你的点的矩形。

答案 1 :(得分:0)

我有这个问题。我的方法有一些不同的目的,但我很好地解决了它。

import pygame, math

def draw_sprite(self, sprite, x, y, rot):
    #'sprite' is the loaded image file.
    #'x' and 'y' are coordinates.
    #'rot' is rotation in radians.

    #Creates a new 'rotated_sprite' that is a rotated variant of 'sprite'
    #Also performs a radian-to-degrees conversion on 'rot'.
    rotated_sprite = pygame.transform.rotate(sprite, math.degrees(rot))

    #Creates a new 'rect' based on 'rotated_sprite'
    rect = rotated_sprite.get_rect()

    #Blits the rotated_sprite onto the screen with an offset from 'rect'
    self.screen.blit(rotated_sprite, (x-(rect.width/2), y-(rect.height/2)))