Menu
CoddyTech

真还是假

本课属于 Coddy Pygame 学习旅程的“游戏窗口中的 Python”单元。第 15 课,共 33 课。

True 和 False 是各自独立的值,称为布尔值。变量可以像开关一样保存其中一个值:

lamp_on = False

if 可以直接测试它:当变量的值为 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 表示按下了哪个键。

challenge icon

挑战

中等

按空格键切换灯的开关。

  1. 在设置部分,将 lamp_on = False。
  2. 在事件循环中,遇到 K_SPACE 的 KEYDOWN 事件时,将 lamp_on = not lamp_on。
  3. 在 (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()
quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

游戏窗口中的 Python中的所有课

自己练习: Pygame 在线编辑器