我想让pygame中的一个注释横跨屏幕。这是我的注释类:
class Commet:
def __init__(self):
self.x = -10
self.y = 10
self.radius = 20
self.commet = pygame.image.load(r"C:\Users\me\OneDrive\Documents\A level python codes\final game\commet.png")
self.commet = pygame.transform.scale(self.commet, (self.radius, self.radius))
self.drop = 0.0000009
self.speed = 2
self.pos = 0
self.commets = []
然后我向self.comments
列表中添加了20条评论。
def tail(self, n): # n is a variable used to denote the length of the self.commets
for i in range(n):
if len(self.commets) <= n - 1:
self.commets.append(Commet())
我有两个问题。第一个问题是移动评论。为了移动它,我做了这个:
def move_tail(self):
for c in self.commets:
c.x += self.speed
for i in range(len(self.commets) - 1):
self.commets[i].y += ((self.commets[i + 1].x) ** 2) * self.drop
对于x坐标,我每帧只需将其值加2即可。然而,对于彗星的y值,我想让它产生一种拖尾效果。我尝试将彗星的y值分配给在列表self.commets中引用我们正在参考的彗星上方一个位置的彗星的x值的平方。我期望彗星沿着一个通用的x = y ** 2二次曲线相互跟随。虽然它们确实沿着曲线移动,但速度却是一样的(我期望它们以不同的速率跟随,因为所有彗星的x值不同),这并没有给我拖尾效果。我该如何产生这种拖尾效果?
我的第二个问题是,我希望跟随第一个彗星的彗星越来越小。我尝试减小用于缩放我导入的图像的半径值。代码看起来像这样。
# Decrease radius
for i in range(n):
self.commets[i].radius = i + 1
当我在控制台打印出彗星的半径值时,它们的范围从1到20,正如我所预期的那样,但是在屏幕上出现的图像大小对于列表中所有的彗星都是相同的。以下代码是我如何粘贴彗星的方式:
for i in range(n):
self.commets[i].pos = i * 10 # This line maintains a certain x- distance between commets
for c in self.tails:
D.blit(c.commet, (c.x - c.pos, c.y))
if self.pos >= n:
self.pos = n
;¬)
为了做到这一点,您需要将当前活动的图像存储在一个容器中,比如一个list
(最多可以有一些)。 - martineau