Menu
CoddyTech

方法

本课属于 Coddy Pygame 学习旅程的“精灵与图像”单元。第 11 课,共 39 课。

星星的数值现在保存在类中,但控制它们的规则,也就是它如何下落、如何绘制,仍然在循环里。写在类中的函数称为方法,它们让规则和数据放在一起:

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 程序中,游戏对象几乎总是有这两个方法: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()

精灵与图像中的所有课

自己练习: Pygame 在线编辑器