Menu
CoddyTech

メソッド

CoddyのPygameジャーニー「スプライトと画像」セクションの一部。レッスン 11/36。

星の数値はクラス内に置かれましたが、星がどのように落ち、どのように描画されるかというルールは、まだループ内にあります。クラス内に書かれた関数はメソッドで、データの隣にルールをまとめます。

class Star:
    # __init__ は以前と同じ

    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)

各メソッドの最初のパラメーターはselfで、そのメソッドが操作するオブジェクトを指します。オブジェクトに対してドットを使ってメソッドを呼び出し、pygameのSurfaceは他の引数と同様に渡します。

star.update()
star.draw(screen)

メインループは、フレーム内で起きることをそのまま表すようになりました。星を更新し、その後で描画します。pygameのプログラムに登場するゲームオブジェクトには、ほぼ必ずこの2つのメソッド、updateとdrawがあります。

challenge icon

チャレンジ

中級
  1. Starにメソッドupdate(self)を追加します。self.speedをself.yに加算し、self.yが480を超えたら星をy = 0に戻します。
  2. draw(self, screen)を追加します。(self.x, self.y)に半径4の白い円を描画します。
  3. ループ内でstar.update()を呼び出し、画面の塗りつぶしの後にstar.draw(screen)を呼び出します。

自分で試してみよう

import pygame

pygame.init()
screen = pygame.display.set_mode((640, 480))
pygame.display.set_caption("Falling Star")
clock = pygame.time.Clock()

class Star:
    def __init__(self, x, y):
        self.x = x
        self.y = y
        self.speed = 2


star = Star(320, 0)

running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    star.y += star.speed
    if star.y > 480:
        star.y = 0

    screen.fill((20, 22, 40))
    pygame.draw.circle(screen, (255, 255, 255), (star.x, star.y), 4)
    pygame.display.flip()
    clock.tick(60)

pygame.quit()
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

スプライトと画像のすべてのレッスン

自分で練習してみよう: Pygameプレイグラウンド