(1)
Pygame最小开发框架
1.引入pygame和sys
2.初始化init()及设置
3.获取事件并逐类响应
4.刷新屏幕
极简开发框架:
引入及初始化
事件及刷新
(2)
sys是Python的标准库
sys提供Python运行时环境变量的操控
sys.exit()用于退出结束游戏并退出
pygame.init()对Pygame内部各功能模块进行初始化创建及变量设置,默认调用
pygame.display.set_mode(size)初始化显示窗口,第一个参数size是一个二元组,分表表示窗口的宽度和高度
pygame.display.set_caption(title)设置显示窗口的标题内容,参数title是一个字符串类型
while True:无限循环知道Python运行时退出结束
pygame.event.get()从Pygame的事件队列中取出事件,并从队列中删除该事件,例如:键盘按下是一个事件
event.type 获得事件类型,并逐类响应
pygame.QUIT退出事件常量
pygame.display.update()对显示窗口进行更新,默认窗口全部重绘
pygame.image.load(filename) 将filename路径下的图像载入游戏,支持JPG、PNG、GIF等13中常用图片格式
Suface对象 ball.get_rect()
Pygame使用内部定义的Surface对象表示所有载入的图像,其中.get_rect()方法返回一个覆盖图像的矩形Rect对象
Rect对象 Rect对象有一些重要属性,例如:
top,bottom,left,right表示说上下左右
width,height表示宽度、高度
ballrect.move(x,y):矩形移动一个偏移量(x,y),即在横轴方向移动x像素,纵轴方向移动y像素,xy为整数
壁球的反弹运动:
遇到左右两侧,横向速度取反;遇到上下两侧,纵向速度取反
screen.fill(color) 显示窗口背景填充为color颜色,采用RGB色彩体系。由于壁球不断运动,运动后原有位置将默认填充白色,因此需要不断刷新背景色
screen.blit(src, dest) 将一个图像绘制在另一个图像上,即将src绘制到dest位置上。通过Rect对象引导对壁球的绘制。
fps = 300 # 每秒帧率参数
pygame.time.Clock()创建一个Clock对象,用于操作时间
Clock.tick(framerate) 控制窗口刷新速度,例如:clock.tick(100)表示每秒钟100次刷新,视频中每次展示的静态图像称为帧
键盘使用:Pygame采用事件对应键盘操作,获取事件将得到键盘输入,不同按键编写操作函数即可
(3)壁球小游戏
需求-实现:通过图片引入一个壁球;
壁球能够上下左右运动;
壁球能够在上下左右边缘反弹;
通过键盘的上下左右控制壁球运动速度:上(纵向加速),下(纵向减速),左(横向减速),右(横向加速)
pygame.K_UP;
pygame.K_LEFT;
pygame.K_DOWN;
pygame.K_RIGHT;
(4)代码
运行环境:Pycharm
# coding=UTF-8
# 一、引入pygame和sys
import pygame,sys
reload(sys)
sys.setdefaultencoding('UTF-8')
# 二、初始化init()及设置
pygame.init()
size = width, height = 1000, 600 # 窗口大小
speed = [1,1]
BLACK = 0, 0, 0 # 窗口背景色RGB值
screen = pygame.display.set_mode(size)
pygame.display.set_caption("Pygame游戏之旅")
ball = pygame.image.load("PYG03-flower.PNG") # 引入壁球
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: # 横向减速 减一个像素
if speed[0] <= 0 : speed[0] = speed[0]
else : speed[0] = speed[0] - 1
elif event.key == pygame.K_RIGHT:
if speed[0] > 0 : speed[0] = speed[0] + 1
else : speed[0] = speed[0] - 1 # 负号表示方向
elif event.key == pygame.K_UP:
if speed[1] > 0 : speed[1] = speed[1] + 1
else : speed[1] = speed[1] - 1
elif event.key == pygame.K_DOWN:
if speed[1] <= 0 : speed[1] = speed[1]
else : speed[1] = speed[1] - 1
ballrect = ballrect.move(speed)
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)