0
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

4

2 回答 2

2

您只是在计算新的 rect 错误。试试这个:

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)

这将计算一个全新的矩形,同时基于给定的中心。在计算位置之前,中心设置在矩形上。因此,您会得到一个以您的点为中心的矩形。

于 2012-05-18T02:20:58.920 回答
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)))
于 2013-11-02T14:23:08.933 回答