方法
本课属于 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。
挑战
中等为星星添加自己的更新和绘制方法。
- 为
Star添加update(self):将self.speed加到self.y上,并在self.y大于 480 时,将星星放回y = 0。 - 添加
draw(self, screen):在(self.x, self.y)处绘制半径为 4 的白色圆形。 - 在循环中调用
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 在线编辑器