2.1 设计流程步骤:
-
引入pygame和sys
-
初始化init()及设置
-
获取事件并响应
-
刷新屏幕
sys模块介绍:
sys是Python的标准库,提供Python运行时环境变量的操控。
引入模块的概念:python3模块(菜鸟教程)
Hello World程序
import pygame,sys
pygame.init()#对Pygame内部各功能模块进行初始化创建及变量设置,默认调用
#初始化显示窗口,第一个参数size是一个二值元组,分别表示窗口的宽度和高度
screen = pygame.display.set_mode((600, 400))
#设置显示窗口的标题内容,参数title是一个字符串类型
pygame.display.set_caption("Pygame游戏之旅")
while True:
for event in pygame.event.get():#从Pygame的事件队列中取出事件,并从队列中删除该事件
#获得事件类型,并逐类响应
if event.type == pygame.QUIT:
sys.exit()
#对显示窗口进行更新,默认窗口全部重绘
pygame.display.update()
壁球小游戏(展示型)与图像的基本使用
2.3.1从需求到实现的三个关键要素:
• (1) 壁球:游戏需要一个壁球,通过图片引入
• (2) 壁球运动:壁球要能够上下左右运动
使图片每次向右及向下移动1个像素
• (3) 壁球反弹:壁球要能够在上下左右边缘反弹
遇到左右两侧,横向速度取反;
遇到上下两侧,纵向速度取反。
Rect对象
Rect对象有一些重要属性,例如:
top,bottom,left,right 表示上下左右
width,height 表示宽度、高度
screen.fill(color)
显示窗口背景填充为color颜色,采用RGB色彩体系。
由于壁球不断运动,运动后原有位置将默认填充白色,因此需要不断刷新背景色
screen.blit(src, dest)
将一个图像绘制在另一个图像上,即将src绘制到dest位置上。通过Rect对象引导对壁球
的绘制。
import pygame,sys
pygame.init()
size = width, height = 600, 400
speed = [1,1]
BLACK = 0, 0, 0
screen = pygame.display.set_mode(size)
pygame.display.set_caption("Pygame壁球")
#将filename路径下的图像载入游戏
ball = pygame.image.load("PYG02-ball.gif")
#Pygame使用内部定义的Surface对象表示所有载入的图像
#.get_rect()方法返回一个覆盖图像的矩形Rect对象
ballrect = ball.get_rect()
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()
#ballrect.move(x,y)
#矩形移动一个偏移量(x,y),即在横轴方向移动x像素,纵轴方向移动y像素,xy为整数
ballrect = ballrect.move(speed[0], speed[1])
if ballrect.left < 0 or ballrect.right > width:
#图片每次碰撞到边缘,速度取反
speed[0] = - speed[0]
if ballrect.top < 0 or ballrect.bottom > height:
speed[1] = - speed[1]
#显示窗口背景填充为color颜色
screen.fill(BLACK)
#将一个图像绘制在另一个图像上
screen.blit(ball, ballrect)
pygame.display.update()
壁球小游戏(节奏型)与屏幕的帧率设置
2.4.1需求:
壁球可以按照一定速度运动
从需求到实现的关键要素:
• 壁球速度:如何控制壁球的运动速度呢?
• 每次循环壁球运动一步
• 控制循环间隔即可控制速度
• (展示型)在尽最大能力运动
pygame.time.Clock()
创建一个Clock对象,用于操作时间
clock.tick(framerate)
获取事件并逐类响应控制帧速度,即窗口刷新速度,例如:刷新屏幕
clock.tick(100)表示每秒钟100次帧刷新,视频中每次展示的静态图像称为帧
import pygame, sys
pygame.init()
size = width, height = 600, 400
speed = [1, 1]
BLACK = 0, 0, 0
screen = pygame.display.set_mode(size)
pygame.display.set_caption("Pygame壁球")
# 将filename路径下的图像载入游戏
ball = pygame.image.load("PYG02-ball.gif")
# Pygame使用内部定义的Surface对象表示所有载入的图像
# .get_rect()方法返回一个覆盖图像的矩形Rect对象
ballrect = ball.get_rect()
fps = 300
fclock = pygame.time.Clock()
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()
# ballrect.move(x,y)
# 矩形移动一个偏移量(x,y),即在横轴方向移动x像素,纵轴方向移动y像素,xy为整数
ballrect = ballrect.move(speed[0], speed[1])
if ballrect.left < 0 or ballrect.right > width:
# 图片每次碰撞到边缘,速度取反
speed[0] = - speed[0]
if ballrect.top < 0 or ballrect.bottom > height:
speed[1] = - speed[1]
# 显示窗口背景填充为color颜色
screen.fill(BLACK)
# 将一个图像绘制在另一个图像上
screen.blit(ball, ballrect)
pygame.display.update()
fclock.tick(fps)
壁球小游戏(操控型)与键盘的基本使用
2.5.1 从需求到实现的关键要素:
• 键盘使用:如何获取键盘的操作事件
• 速度调节:根据对应按键调节壁球运动速度
键盘使用
-
Pygame采用事件来对应键盘操作
-
获取事件将得到键盘输入
-
不同按键编写操作函数即可
pygame.KEYDOWN
Pygame对键盘敲击的事件定义,键盘每个键对应一个具体定义
[图片上传失败...(image-14b9b4-1618151886786)]
import pygame,sys
pygame.init()
size = width, height = 600, 400
speed = [1,1]
BLACK = 0, 0, 0
screen = pygame.display.set_mode(size)
pygame.display.set_caption("Pygame壁球")
ball = pygame.image.load("PYG02-ball.gif")
ballrect = ball.get_rect()
fps = 300
fclock = pygame.time.Clock()
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT:
speed[0] = speed[0] if speed[0] == 0 else (abs(speed[0]) - 1)*int(speed[0]/abs(speed[0]))
elif event.key == pygame.K_RIGHT:
speed[0] = speed[0] + 1 if speed[0] > 0 else speed[0] - 1
elif event.key == pygame.K_UP:
speed[1] = speed[1] + 1 if speed[1] > 0 else speed[1] - 1
elif event.key == pygame.K_DOWN:
speed[1] = speed[1] if speed[1] == 0 else (abs(speed[1]) - 1)*int(speed[1]/abs(speed[1]))
ballrect = ballrect.move(speed)
# ballrect.move(x,y)
# 矩形移动一个偏移量(x,y),即在横轴方向移动x像素,纵轴方向移动y像素,xy为整数
if ballrect.left < 0 or ballrect.right > width:
speed[0] = - speed[0]
if ballrect.top < 0 or ballrect.bottom > height:
speed[1] = - speed[1]
screen.fill(BLACK)
screen.blit(ball, ballrect)
pygame.display.update()
fclock.tick(fps)
网友评论