下落的方块
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。
方块离开窗口后还会继续下落。目前还没有东西能阻止它;下一课会让它回来。
挑战
简单让一个方块从顶部落下。
- 在篮子下面,创建
block = pygame.Rect(220, 0, 20, 20)。 - 在循环中,篮子移动后,将
block.y增加 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 在线编辑器