Menu
CoddyTech

下落的方块

Coddy 用 Pygame 制作游戏 课程的第 10 课,共 41 课。

下落的物体会在每一帧中不断增大 y 坐标。也把方块设为一个 Rect,并在循环的每次执行中增加它的 y 坐标:

block = pygame.Rect(220, 0, 20, 20)

while running:
    # 事件和按键
    block.y += 3
    # 填充、绘制

每秒 60 帧时,每帧移动 3 像素,相当于每秒移动 180 像素。窗口高 360 像素,所以方块需要两秒才能到达底部。

这个游戏像 Move a Square 一样按帧移动,而不是按 dt 移动。Rect 只能保存整数,因此,像 0.6 像素这样的步长会被截断为 0,Rect 就永远不会移动。按时间移动 Rect 的游戏会把位置保存在 Vector2 中,再将它复制到 Rect。

方块离开窗口后还会继续下落。目前还没有东西能阻止它;下一课会让它回来。

challenge icon

挑战

简单

让一个方块从顶部落下。

  1. 在篮子下面,创建 block = pygame.Rect(220, 0, 20, 20)。
  2. 在循环中,篮子移动后,将 block.y 增加 3。
  3. 在篮子之后,用红色 (235, 80, 80) 绘制方块。

按“开始”:一个红色方块会从顶部落下。然后点击“检查”。

亲手试试

import pygame

pygame.init()
screen = pygame.display.set_mode((480, 360))
pygame.display.set_caption("Catch the Blocks")
clock = pygame.time.Clock()

basket = pygame.Rect(200, 330, 80, 16)

running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    keys = pygame.key.get_pressed()
    if keys[pygame.K_LEFT]:
        basket.x -= 8
    if keys[pygame.K_RIGHT]:
        basket.x += 8
    basket.clamp_ip(screen.get_rect())

    screen.fill((30, 30, 46))
    pygame.draw.rect(screen, (80, 160, 255), basket)
    pygame.display.flip()
    clock.tick(60)

pygame.quit()

用 Pygame 制作游戏中的所有课

自己练习: Pygame 在线编辑器