Menu
CoddyTech

你的第一个类

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

这颗星星由三个变量表示:star_x、star_y 和 star_speed。表示一颗星星还行;要表示满天的星星,就需要更好的方法把每颗星星的数字放在一起。

类是某种对象的蓝图。根据它创建的每个对象都有自己的值,这些值称为属性:

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


star = Star(320, 0)

Star(320, 0)会创建一个新的 Star 对象。接着,Python 会用 x = 320 和 y = 0 运行它的 __init__ 函数。这个函数位于类中,用来初始化每个新对象(Python 会查找这个名称,它的两侧各有两个下划线)。在函数内部,self 指的是这个新对象,所以 self.x = x 会把 320 存储在这个对象中。在类外部,你可以通过 star.x 获取同一个值,也可以用同样的方式修改它:star.y += star.speed。

类名以大写字母开头:Star 是蓝图,star 是根据它创建的一颗星星。

challenge icon

挑战

简单

将星星的值保存在一个对象中。

  1. 编写一个类 Star,其 __init__(self, x, y) 用来保存 self.x、self.y 和 self.speed = 2。
  2. 将三个变量替换为 star = Star(320, 0)。
  3. 在循环中,在原来使用旧变量的地方改用 star.x、star.y 和 star.speed。

点击“开始”:星星会像之前一样下落。然后点击“检查”。

亲手试试

import pygame

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

star_x = 320
star_y = 0
star_speed = 2

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 在线编辑器