问题描述
我正在尝试制作一个被抛出的球的动画,并且我希望它同时沿着平滑的抛物线路径旋转.但是,我似乎无法让 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-同时旋转精灵并跟随路径的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!


大气响应式网络建站服务公司织梦模板
高端大气html5设计公司网站源码
织梦dede网页模板下载素材销售下载站平台(带会员中心带筛选)
财税代理公司注册代理记账网站织梦模板(带手机端)
成人高考自考在职研究生教育机构网站源码(带手机端)
高端HTML5响应式企业集团通用类网站织梦模板(自适应手机端)