【问题标题】:Pygame Image RotationPygame 图像旋转
【发布时间】:2016-07-31 00:46:15
【问题描述】:

我正在使用 Python 和 Pygame 制作一个简单的程序自上而下的驾驶模拟器。驱动部分工作正常;向上键移动汽车,左右键控制汽车。问题在于图像的旋转;它到处移动(运行代码查看它)。我认为这是因为当图像旋转时,尺寸会发生变化(因为它必须是矩形)。当分辨率改变时,位置也会改变。如果有人知道解决此问题的方法,我将不胜感激。 car.png -->

import pygame, math
pygame.init()

screen = pygame.display.set_mode((600, 500))
clock = pygame.time.Clock()
pygame.display.set_caption('Car Driving')

def main():
    r = 0
    car = pygame.image.load('images/car.png')

    while True:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                quit()

        r += 3

        screen.fill((40,40,40))
        screen.blit(pygame.transform.rotate(car, r), (200, 100))

        pygame.display.update()
        clock.tick(40)


main()

【问题讨论】:

  • 您的问题确实不应该被设置为强迫我们运行您的代码。即使我们想要,我们也没有您的 car.png 图像。只需显示代码的重要部分并解释您的问题
  • 您需要有图像(或任何图像)才能使问题真正发生。运行代码比我解释问题要容易得多。但无论如何我都会简化它。

标签: python pygame


【解决方案1】:

来自 PYgame 文档:

除非以 90 度为增量旋转,否则图像将被填充得更大以保持新尺寸。

这意味着你得到了一个新的 Rect 对象。文档中没有信息,但我认为原始图像将位于新 Rect 的中心。
这意味着如果您将新 Rect 的位置放在所需的位置,您将获得预期的结果。

center=(100,200) #Store pos by center

#In loop:
rCar=pygame.transform.rotate(car,r) #Do the rotation
size=rCar.get_size() #Store size
hSize=[n/2 for n in size] #Half the size
pos=(center[0]-hSize[0],center[1]-hSize[1])  #Substract half the size
#from the center
screen.blit(rCar,pos) #Draw

让我解释一下:

希望对你有帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-01-05
    • 1970-01-01
    • 2013-10-19
    • 1970-01-01
    • 2022-08-07
    • 1970-01-01
    • 1970-01-01
    • 2021-09-01
    相关资源
    最近更新 更多