Pygame- rotate sprite and follow path simultaneously(Pygame-同时旋转精灵并跟随路径)
问题描述
我正在尝试制作一个被抛出的球的动画,并且我希望它同时沿着平滑的抛物线路径旋转.但是,我似乎无法让 pygame.transform.rotate()
合作.
这是我迄今为止尝试过的:
导入pygamescreen = pygame.display.set_mode((500, 500))计时器 = pygame.time.Clock()球 = 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.imagerotaterect = ball.rect对于范围内的我(60):#pygame.draw.rect(屏幕,颜色(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.centerscreen.blit(ball.image,ball.rect)pygame.display.update()计时器.tick(60)对于 pygame.event.get() 中的 e:如果 e.type == pygame.QUIT:pygame.quit()sys.exit()而1:对于 pygame.event.get() 中的 e:如果 e.type == pygame.QUIT:pygame.quit()sys.exit()
每当我运行代码时,球都会以不规则的方式移动.我做了第二个矩形,试图控制定位,但球最终形成了这样的路径:
显然每个框架的定位有问题,但我不确定为什么任何框架会不合适,因为它们的位置是由它们的中心点决定的.
这是球的图像:
它是 16x16(正方形),所以我对为什么图像没有遵循干净的路径感到目瞪口呆.
注意,旋转后的图像大小不同.请参阅
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.centerscreen.blit(ball.image,ball.rect)pygame.display.update()
I'm trying to animate a ball getting thrown, and I want it to rotate an follow a smooth, parabolic path at the same time. However, I just can't seem to get pygame.transform.rotate()
to cooperate.
Here's what I've tried so far:
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()
Whenever I run the code, the ball moves in an irregular pattern. I made a second rect to try to keep the positioning under control, but the ball ends up forming a path like this:
Obviously there's something wrong with the positioning on each frame, but I'm not sure why any of the frames would be out of place, since their location is determined by their center point.
Here's the ball image:
It's 16x16 (square), so I'm dumbfounded as to why the image isn't following a clean path.
Note, a rotated image varies in size. See How do I rotate an image around its center using Pygame?.
Get the rectangle of the rotated image and set the center of the rectangle by the center of the helper rectangle rotaterect
. This causes that the image is symmetrically aligned around the center.
You missed to update the ball.rect
to the actual size of the rotated image:
ball.rect = ball.image.get_rect()
rotaterect.topleft = (5*i,((i-20)*(i-20) + 1)/5)
ball.rect.center = rotaterect.center
Example:
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()
这篇关于Pygame-同时旋转精灵并跟随路径的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:Pygame-同时旋转精灵并跟随路径


基础教程推荐
- 用于分类数据的跳跃记号标签 2022-01-01
- Python kivy 入口点 inflateRest2 无法定位 libpng16-16.dll 2022-01-01
- 使用PyInstaller后在Windows中打开可执行文件时出错 2022-01-01
- 线程时出现 msgbox 错误,GUI 块 2022-01-01
- 如何在海运重新绘制中自定义标题和y标签 2022-01-01
- 筛选NumPy数组 2022-01-01
- 如何让 python 脚本监听来自另一个脚本的输入 2022-01-01
- Dask.array.套用_沿_轴:由于额外的元素([1]),使用dask.array的每一行作为另一个函数的输入失败 2022-01-01
- 何时使用 os.name、sys.platform 或 platform.system? 2022-01-01
- 在 Python 中,如果我在一个“with"中返回.块,文件还会关闭吗? 2022-01-01