オブジェクトのリスト
CoddyのPygameジャーニー「スプライトと画像」セクションの一部。レッスン 13/36。
名前付きの星が2つあるだけでは、空とは言えません。40個ならリストが必要です。ループでオブジェクトを作り、それぞれを追加します。
stars = []
for i in range(40):
x = random.randint(0, 639)
y = random.randint(0, 479)
speed = random.randint(1, 3)
stars.append(Star(x, y, speed))次に、1つのループですべてを更新し、別のループですべてを描画します。
for star in stars:
star.update()forの中では、starは順番に各オブジェクトを指すので、star.update()はその星を固有の速度で動かします。星をさらに100個追加しても、変更するのは数字1つだけです。更新と描画のコードはそのままです。
ゲームループの前に、リストを一度だけ作ります。ループ内で作ったリストは、フレームごとに新しい星のリストになり、すべて開始位置に戻るため、何も動きません。
チャレンジ
中級- 先頭に
import randomを追加します。 - ループの前に、
starsを作成します。これは40個のStarオブジェクトのリストで、それぞれに0から639までのランダムなx、0から479までのランダムなy、1から3までのランダムな速度を設定します。 - ループ内で、
stars内のすべての星を更新し、fillの後にすべての星を描画します。slowとfastを削除します。
自分で試してみよう
import pygame
pygame.init()
screen = pygame.display.set_mode((640, 480))
pygame.display.set_caption("Falling Stars")
clock = pygame.time.Clock()
class Star:
def __init__(self, x, y, speed):
self.x = x
self.y = y
self.speed = speed
def update(self):
self.y += self.speed
if self.y > 480:
self.y = 0
def draw(self, screen):
pygame.draw.circle(screen, (255, 255, 255), (self.x, self.y), 4)
slow = Star(200, 0, 1)
fast = Star(440, 0, 3)
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
slow.update()
fast.update()
screen.fill((20, 22, 40))
slow.draw(screen)
fast.draw(screen)
pygame.display.flip()
clock.tick(60)
pygame.quit()
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
スプライトと画像のすべてのレッスン
自分で練習してみよう: Pygameプレイグラウンド