Целью является наложение скоплений прямоугольников [пузырьков], движущихся вверх по экрану с различными скоростями. Я попал в блокпост, когда речь заходит о создании движущихся прямоугольников.Анимация Pygame Rects для перемещения вверх по экрану
способ, которым я дошел до этого, состоит в том, чтобы заполнить список экземплярами класса моего класса Bubble. оттуда я повторил список экземпляров и назвал их методом blow_bubble, эффективно рисуя каждый пузырь в другом месте на экране и инициализируя каждый свой собственный показатель скорости движения. эти пузыри затем присоединяются к отдельному списку, озаглавленному «нарисован», чтобы обозначить, что они действительно были нарисованы (хотя и не отображены).
Следующая часть, где она становится неровной.
У меня есть цикл while, который принимает длину вытянутого списка, больше нуля, в качестве условия для работы. согласно форме в этой статье: http://programarcadegames.com/index.php?chapter=introduction_to_animation поверхность экрана задана для заполнения в начале цикла, и в конце ее я обновил поверхность экрана с помощью pygame.display.flip(). в середине цикла while я повторяю через экземпляры классов в отрисованном списке и уменьшая атрибут, представляющий их значение y, с учетом скорости движения экземпляра.
как-то это не работает.
Я проверил, чтобы значение y фактически уменьшалось; в заявлении печати вывод будет тем, что можно было бы ожидать: значение y опускается в отрицательные числа. но прямые остаются неподвижными.
как всегда, любые идеи очень ценятся.
#colors, screen, clock, etc defined above but omitted
pygame.init()
class Bubble():
def __init__(self, screenheight, screenwidth):
self.w = self.h = 0
self.x, self.y = 0, 0
self.moverate = 0
def reset_bubble(self):
self.w = self.h = random.randrange(2, int(screenwidth*1/4))
self.x = random.randrange(0, (screenwidth-self.w))
self.y = screenheight-self.w
self.moverate = 1
def blow_bubble(self):
self.reset_bubble()
pygame.draw.rect(screen, WHITE, (self.x, self.y, self.w, self.h), 10)
bubbles = []
drawn = []
i = 0
for i in range(10): #creates list of bubble objects
bubble = Bubble(screenheight, screenwidth)
bubbles.append(bubble)
for i in range(len(bubbles)): #draws bubbles without rendering them
bubbles[i].blow_bubble()
drawn.append(bubbles[i]) #appends objects to a new list (drawn)
while len(drawn) > 0:
screen.fill((BLACK))
drawn[i].y -= drawn[i].moverate #moves the bubble up the screen
pygame.display.flip() #updates the screen
if i >= 0: #counts up til len(drawn) then counts down [then up again]
i+=1 #to make sure we move every bubble a little each iteration
if i ==len(drawn):
i-= 1
clock.tick(FPS)
pygame.quit()
Нет проблем! Надеюсь, ваш следующий код будет лучше! – ashbygeek