Pygame旋转精灵并同时跟随路径

2024-06-16 11:18:00 发布

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

我正在尝试设置一个球被扔出去的动画,我希望它能同时沿着一条平滑的抛物线路径旋转。然而,我似乎无法得到pygame.transform.rotate()的合作。你知道吗

以下是我迄今为止尝试过的:

import pygame
screen = pygame.display.set_mode((500, 500))
timer = pygame.time.Clock()
ball = pygame.sprite.Sprite()
ball.image = pygame.image.load("throwball.png")
ball.image = pygame.transform.scale(ball.image, (48,48))
ball.rect = ball.image.get_rect(topleft = (50,50))
ball.orig_image = ball.image
rotaterect = ball.rect

for i in range(60):
    #pygame.draw.rect(screen, Color(255,255,255), ball.rect)
    ball.image = pygame.transform.rotate(ball.orig_image, i*20)
    rotaterect.topleft = (5*i,((i-20)*(i-20) + 1)/5)
    ball.rect.center = rotaterect.center
    screen.blit(ball.image, ball.rect)
    pygame.display.update()
    timer.tick(60)
    for e in pygame.event.get():
        if e.type == pygame.QUIT:
            pygame.quit()
            sys.exit()
while 1:
    for e in pygame.event.get():
        if e.type == pygame.QUIT:
            pygame.quit()
            sys.exit()

每当我运行代码时,球就会以不规则的模式移动。我做了第二个rect来控制位置,但是球最终形成了这样的路径:this

很明显,每个帧上的定位都有问题,但我不确定为什么任何帧都不合适,因为它们的位置是由它们的中心点决定的。你知道吗

以下是球的图像:

enter image description here

它是16x16(正方形),所以我很惊讶为什么图像没有遵循一个干净的路径。你知道吗


Tags: inrectimage路径forgetdisplaytransform
1条回答
网友
1楼 · 发布于 2024-06-16 11:18:00

注意,旋转后的图像大小不同。见How do I rotate an image around its center using Pygame?。你知道吗

获取旋转图像的矩形,并通过辅助矩形的中心设置矩形的中心rotaterect。这导致图像围绕中心对称对齐。
您没有将ball.rect更新为旋转图像的实际大小:

ball.rect = ball.image.get_rect()
rotaterect.topleft = (5*i,((i-20)*(i-20) + 1)/5)
ball.rect.center = rotaterect.center

示例:

for i in range(60):
    ball.image = pygame.transform.rotate(ball.orig_image, i*20)
    ball.rect = ball.image.get_rect()
    rotaterect.topleft = (5*i,((i-20)*(i-20) + 1)/5)
    ball.rect.center = rotaterect.center
    screen.blit(ball.image, ball.rect)
    pygame.display.update()

相关问题 更多 >