【发布时间】:2021-11-05 19:03:55
【问题描述】:
我正在 pygame 中制作一个游戏,你是一只水母,你可以四处游动。我设法能够转向并朝着水母旋转的方向前进。但是当我朝那个方向走时,玩家的形象在颤抖。我能以某种方式解决这个问题吗?
其中 self.list[int(self.current)] 是动画的当前图像和 dt 增量时间。
if pygame.key.get_pressed()[pygame.K_UP]:
self.rotr = math.radians(self.rot)
self.ysp = math.cos(self.rotr)
self.xsp = math.sin(self.rotr)
self.x -= self.xsp*dt*20
self.y -= self.ysp*dt*20
self.image = pygame.transform.rotate(self.list[int(self.current)], self.rot)
self.rect = self.image.get_rect(center = (x, y))
if pygame.key.get_pressed()[pygame.K_LEFT]:
self.rot += math.pi*dt*7
if pygame.key.get_pressed()[pygame.K_RIGHT]:
self.rot -= math.pi*dt*7
【问题讨论】:
-
似乎您依赖某种量化(即整数)值来进行位置和/或旋转。您应该使用浮动的 X 和 Y 值以及角度值。但是如果没有minimal reproducible example,这个问题就无法回答,可能会被关闭。但无论如何,人们通常使用图像像素值或 rect X 和 Y 值作为其对象的坐标,这会引入各种抖动,就像您正在经历的那样。您需要对浮点 X 和 Y 值进行四舍五入,以便将精灵放在屏幕上的某个位置。
-
我不知道你所说的“摇晃”是什么意思。在我看来并不坏。由于图像旋转,您确实会得到一些伪影,但在旋转具有锐利边缘的小图像时总是会出现这种情况。您可能会考虑将水母换成更柔软的边缘。
-
很抱歉没有添加我的代码,但我现在这样做了。至少我认为重要的代码
-
试试
self.rect = self.image.get_rect(center = (round(x), round(y)))。然而,在 Pygame 中,精灵总是以 1 像素为间隔移动。它可能没有比这更好的了。 -
动画精灵的大小都一样吗?