self 就是对象本身
本课属于 Coddy Pygame 学习旅程的“精灵与图像”单元。第 12 课,共 39 课。
一个类可以创建任意数量的对象,每个对象都有自己的属性。给 __init__ 添加一个速度参数,两颗星星就可以以不同的速度下落:
slow = Star(200, 0, 1)
fast = Star(440, 0, 3)当你写下 slow.update() 时,Python 会运行 Star.update(slow):self 就是 slow,所以 self.y += self.speed 会让 slow 移动 1。fast.update() 会在 self 为 fast 的情况下运行相同的代码行,让它移动 3。同一个方法,两个对象,彼此的数值互不影响。
因此,对象拥有的每个值前面都需要加上 self.。不带它的名称,比如 speed,是方法中的普通局部变量:方法结束时,它就会消失。
挑战
简单创建两颗以各自速度下落的星星。
- 给
__init__添加第三个参数speed,并将其存储为self.speed。 - 将
star替换为slow = Star(200, 0, 1)和fast = Star(440, 0, 3)。 - 每一帧都更新并绘制两颗星星。
按“开始”:两颗星星以不同的速度下落。然后按“检查”。
亲手试试
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
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)
star = Star(320, 0)
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
star.update()
screen.fill((20, 22, 40))
star.draw(screen)
pygame.display.flip()
clock.tick(60)
pygame.quit()
精灵与图像中的所有课
自己练习: Pygame 在线编辑器