真还是假
本课属于 Coddy Pygame 学习旅程的“游戏窗口中的 Python”单元。第 15 课,共 33 课。
True 和 False 是各自独立的值,称为布尔值。变量可以像开关一样保存其中一个值:
lamp_on = Falseif 可以直接测试它:当变量的值为 True 时,if lamp_on: 就会运行。not 会将它反转,因此 lamp_on = not lamp_on 可以切换灯的状态。
开关需要的是按键按下,而不是一直按住。按键按住期间,get_pressed() 每一帧都会返回 True,因此灯每秒会切换 60 次。按键按下时会产生一次 KEYDOWN 事件,出现在游戏循环顶部的事件循环中:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
if event.type == pygame.KEYDOWN and event.key == pygame.K_SPACE:
lamp_on = not lamp_on第 2 单元会完整讲解事件。目前你只需要知道:event.type 表示发生了什么,event.key 表示按下了哪个键。
挑战
中等按空格键切换灯的开关。
- 在设置部分,将
lamp_on = False。 - 在事件循环中,遇到
K_SPACE的KEYDOWN事件时,将lamp_on = not lamp_on。 - 在
(320, 290)处绘制半径为 30 的灯光:当lamp_on为 True 时使用(255, 220, 100),否则使用(70, 70, 90)。
按“开始”,然后按空格键:灯会切换开关。接着点击“检查”。
亲手试试
import pygame
pygame.init()
screen = pygame.display.set_mode((640, 480))
pygame.display.set_caption("Night Sky")
clock = pygame.time.Clock()
# 在这里完成设置,再进入游戏循环。
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
# 在这里修改内容,每帧执行一次。
screen.fill((20, 24, 48))
# 填充背景后,在这里绘制。
pygame.draw.rect(screen, (90, 90, 110), (310, 300, 20, 180))
pygame.draw.circle(screen, (70, 70, 90), (320, 290), 30)
pygame.display.flip()
clock.tick(60)
pygame.quit()
这节课包含一个小测验。开始学习即可作答,并记录你的进度。
游戏窗口中的 Python中的所有课
自己练习: Pygame 在线编辑器