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
答案 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)))