每一帧都移动
本课属于 Coddy Pygame 学习旅程的“游戏窗口中的 Python”单元。第 8 课,共 33 课。
游戏循环每秒运行 60 次,因此“在这里更改内容”部分中的一行代码每帧运行一次。你可以用它每次让变量稍微变化一点:
comet_x = comet_x + 2从右边读起:取 comet_x 中的值,加上 2,再把结果存回 comet_x。如果它原来是 40,现在就是 42。下一帧变成 44,然后是 46。
每一帧都会在 comet_x 处绘制彗星,因此每一帧都会显示它向右移动 2 像素:每秒 120 像素。游戏中的一切都是这样移动的:一个数字在每一帧都发生一点变化。
comet_x = 40 位于设置部分,只运行一次。如果把它放在循环中,每一帧都会把彗星的位置重设为 40,彗星就会停在原地。
Python 还有一种简写形式:comet_x += 2,效果相同。
挑战
简单让彗星向右飞。
- 找到
# Change things here, once a frame.部分。 - 在这里给
comet_x加上 2,让它每帧移动 2 个像素。
按“开始”:彗星会向右飞。然后按“检查”。
亲手试试
import pygame
pygame.init()
screen = pygame.display.set_mode((640, 480))
pygame.display.set_caption("Night Sky")
clock = pygame.time.Clock()
# 在这里进行设置,放在游戏循环之前。
moon_x = 160
moon_y = 120
comet_x = 40
comet_y = 200
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
# 每帧在这里更新内容。
screen.fill((20, 24, 48))
# 填充背景后,在这里绘制。
pygame.draw.circle(screen, (240, 230, 160), (moon_x, moon_y), 50)
pygame.draw.circle(screen, (120, 200, 255), (comet_x, comet_y), 8)
pygame.display.flip()
clock.tick(60)
pygame.quit()
游戏窗口中的 Python中的所有课
自己练习: Pygame 在线编辑器