Python 使用pygame.transform.rotate()时出现奇怪的移动
当我旋转图像时,尽管我正在保存旧的矩形中心并使旋转的矩形中心成为旧的中心,但图像会发生奇怪的移动。我想让它在正方形的中心旋转 下面是它的样子:Python 使用pygame.transform.rotate()时出现奇怪的移动,python,pygame,Python,Pygame,当我旋转图像时,尽管我正在保存旧的矩形中心并使旋转的矩形中心成为旧的中心,但图像会发生奇怪的移动。我想让它在正方形的中心旋转 下面是它的样子: 您只是计算新的rect错误。试试这个: def rotate(self): #Save the original rect center self.saved_center=self.rect.center #Rotates a saved image every time to maintain quality sel
您只是计算新的rect错误。试试这个:
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
它告诉新的矩形以原始中心为中心(中心在这里永远不会改变,只是不断地传递)
问题是self.rect从未正确更新。您只是在更改中心值。整个矩形会随着图像的旋转而改变,因为它的大小会变大或缩小。因此,您需要做的是每次完全设置新的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
这将计算一个全新的rect,同时以给定的中心为基础。在计算位置之前,在矩形上设置中心。因此,你会得到一个以你的点为中心的矩形。我有这个问题。我的方法有点不同的目的,但我很好地解决了它
self.image.get_rect(center=self.rect.center)
你能发布一个工作示例吗?另外,我之前也回答了一个类似的pygame问题,也提到了在保持旋转中心的同时进行旋转。也许你可以看看它是否有用?main:和module:。我会查看你发布的链接,希望能有所帮助:)太漂亮了:哦!非常感谢。你能解释一下self.image.get_rect(center=self.rect.center)是什么,以及它与self.rect.center的区别吗。我做了一次测试并打印了变量。reg center:(325225)center rect:我不得不说这是我见过的最好的单线解决方案。谢谢你!
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)))