当我使用pygame.transform.rotate()时,它会移动我的图像,如果连续使用,它会移出屏幕。为什么?

2024-10-01 15:43:27 发布

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

所以我加载了一个图像,然后对它使用旋转。然而,当我运行这个程序时,它只是从屏幕上滑了下来。为什么?在

import pygame, sys




def rotate45(gameObject):
    newObject = pygame.transform.rotate(gameObject, 45)
    return newObject

def main():
    pygame.init()
    screen = pygame.display.set_mode((800,600))
    Tardis = pygame.image.load("Tardis.bmp")
    Tardis.set_colorkey((255, 0, 0))









    while True:

        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                sys.exit()

        screen.fill( (0,0,0) )

        Tardis = rotate45(Tardis)

        screen.blit(Tardis, (400,300))

        pygame.display.update()

有人能帮忙吗?如果你需要知道的话,我的图像是75 x 134。在

我不熟悉编程,但我不知道为什么会发生这种情况。在


Tags: 图像import程序event屏幕defdisplaysys
2条回答

问题是所有的图像都是矩形。如果从75x134的图像开始并将其旋转45度,则新矩形将更大(147x147),因为45度图像需要适合新矩形。然后这个新矩形将再次旋转45度,需要(207x207)。。。最终它会变得如此之大,塔迪斯矩形大部分是背景,即使左上角在同一个点上,原始图像也会离开屏幕。你应该做的是离开原始图像,只是增加你的旋转量,你每次需要绘制它。在

...
tardis_angle = 0
while True:
    # Events
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            sys.exit()

    # update game state
    tardis_angle = (tardis_angle + 45) % 360

    # draw
    screen.fill( (0,0,0) )
    screen.blit(pygame.transform.rotate(Tardis, tardis_angle), (400,300))
    pygame.display.update()

就像@cmd所说,rotate转换改变了对象的维度。保存原始对象并继续对原始对象应用更改后的转换。下面是一个例子:

import pygame
import sys
import time

def rotate45(gameObject, rotations={}):
    r = rotations.get(gameObject,0) + 45
    rotations[gameObject] = r
    return pygame.transform.rotate(gameObject, r)

def main():
    pygame.init()
    screen = pygame.display.set_mode((800,600))
    Tardis = pygame.image.load("Tardis.bmp")
    Tardis.set_colorkey((255, 0, 0))

    while True:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                sys.exit()
        screen.fill( (0,0,0) )
        rotatedTardis = rotate45(Tardis)
        screen.blit(rotatedTardis, (400,300))
        pygame.display.update()
        time.sleep(1)

main()

相关问题 更多 >

    热门问题