旋转时Pygame图像未居中

2024-06-30 15:41:35 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我重新制作了我的程序来旋转并把图像放到一个列表中,图像会旋转,但不会居中旋转。图像旋转看起来像是在左上角和右下角之间来回反弹

我希望图像在屏幕中心旋转,在旋转图像矩形的中心

我最近发现了这个视频,并试图实现中心旋转没有运气: https://www.youtube.com/watch?v=ia7Syd2Zjn4

def loadImage(self):
    #load image file
    imagePath = filedialog.askopenfilename()
    self.userImage = pygame.image.load(imagePath).convert_alpha()

    # calculate scaled image size
    scaledImage = self.scale * self.userImage.get_height()
    self.userImage = pygame.transform.scale(self.userImage, (scaledImage, scaledImage))

    # create list for rotated images
    self.cells = []

    for i in range(360):
        # starting rect size
        self.rect = pygame.Rect(0, 0, scaledImage, scaledImage)

        #
        self.processedImage = pygame.Surface(self.rect.size).convert()
        self.processedImage.set_colorkey([0, 0, 0])

        # old center position
        previousCenter = self.rect.center

        # rotate image
        self.rotatedImage = pygame.transform.rotate(self.userImage, i)

        self.rect = self.userImage.get_rect()

        self.rect.center = previousCenter

        rect = self.rotatedImage.get_rect()

        # add rotated images to list
        self.cells.append(self.rotatedImage)
        print('Cell', i, self.cells[i])

        i += 1

def drawImage(self):
    clock = pygame.time.Clock()
    i = 0

    while True:
        thisIm = self.cells[i]
        print(thisIm)

        # rotation speed
        clock.tick(20)

        # screen position for image
        drawPos = (self.windowWidth // 2, self.windowWidth // 2)

        # screen blit
        self.mainWindow.blit(self.cells[i], drawPos)
        pygame.display.flip()

        # increment rotation and limit rotation to 360 degrees
        i += 1
        i %= 360

        # clear
        self.mainWindow.fill((0, 0, 0))

Tags: rect图像imageselfforsizeget中心
1条回答
网友
1楼 · 发布于 2024-06-30 15:41:35

当你设置模式,然后你得到表面,你可以得到它的矩形

screen = pygame.display.set_mode((800, 600))
screen_rect = screen.get_rect()

要使屏幕上的图像居中,可以获取其矩形,并将中心或屏幕矩形指定给图像矩形的中心

test = pygame.transform.rotate(processedImage, angle)
test_rect = test.get_rect()

test_rect.center = screen_rect.center

self.window.blit(test, test_rect)

类似的方法,你可以保持图像的位置,当你旋转它。你必须得到它的中心从原始图像和指定旋转图像

rectangle = pygame.Rect(self.scaledImageHeight * i, 0, self.scaledImageHeight, ...)

test = pygame.transform.rotate(processedImage, angle)
test_rect = test.get_rect()

test_rect.center = rectangle.center

self.window.blit(test, test_rect)

它只能在图像是规则的并且在图像中心有真实的旋转点时工作


以类似的方式,您可以将文本置于矩形的中心来创建按钮

text_rect.center = button_rect.center

相关问题 更多 >