你的第一个类
本课属于 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 是根据它创建的一颗星星。
挑战
简单将星星的值保存在一个对象中。
- 编写一个类
Star,其__init__(self, x, y)用来保存self.x、self.y和self.speed = 2。 - 将三个变量替换为
star = Star(320, 0)。 - 在循环中,在原来使用旧变量的地方改用
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 在线编辑器