Я хочу, чтобы коммент в пигаме стрелял по экрану. Вот мой класс комментариев
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 = []
Затем я добавил 20 комментариев в список self.commets
.
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
Для координаты х я просто добавил 2 к его значению в каждом кадре. Тем не менее, для значения y
комета, я хочу, чтобы он производил эффект, похожий на хвост. Я попытался присвоить значение y
комета квадрату x
значения комета в индексной позиции над кометом, на который мы ссылаемся в списке self.commets
. Я ожидал, что кометы будут следовать друг за другом вдоль общая кривая x = y ** 2 квадради c. Они следуют по кривой, но все с одинаковой скоростью (я ожидал, что они будут следовать с разной скоростью, потому что все комментарии имеют разные значения x), что дает мне эффект, похожий на хвост. Как я смогу создать этот эффект, похожий на хвост?
Вторая часть моего вопроса заключается в том, что я хочу, чтобы комментарии, следующие за первым, становились все меньше и меньше. Я попытался уменьшить значение radius
, которое используется для масштабирования импортированного изображения. Код выглядит следующим образом:
# 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