Python最经典的2D游戏开发第三方库,也支持3D游戏开发
Pygame适合用于游戏逻辑验证、游戏入门及系统演示验证
Pygame是一种游戏开发引擎,基本逻辑具有参考价值
pygame库安装:在系统命令行运行pip install pygame即可
先从一段代码开始
# 示例代码1
import pygame,sys
pygame.init() #初始化init()
screen = pygame.display.set_mode((600, 400)) #初始化显示窗口
pygame.display.set_caption("Pygame游戏之旅") #设置窗口标题
icon = pygame.image.load("PYG03‐flower.png")
pygame.display.set_icon(icon) #设置窗口图标
while True:
for event in pygame.event.get(): #事件获取
if event.type == pygame.QUIT: #事件判别及响应
sys.exit() #结束游戏并退出
pygame.display.update() #刷新屏幕
代码可以分为导入及初始化以及事件响应及刷新的无限循环部分,如下图所示
sys为Python内置的标准库,用于提供Python运行时环境变量的操控。在这段代码中,我们仅用到sys.exit()来实现退出结束游戏
pygame.init()实现对Pygame内部各功能模块进行初始化创建及变量设置,默认调用
Pygame提供了一些重要的屏幕控制函数,在对屏幕进行操作时,以像素为单位。
1、screen=pygame.display.set_mode(size=(width,height),flags)
生成的screen为Pygame下的Surface对象
size需要为元组类型,flags用于指定屏幕显示方式(窗口大小可调、无边框以及全屏显示)
flags=pygame.RESIZABLE #窗口大小可调
flags=pygame.NOFRAME #无边框
flags=pygame.FULLSCREEN #全屏
例:screen=pygame.diplay.set_mode((800,450),pygame.FULLSIZE)
注意:当我们设置size为给定大小(width,height)后,对于可变尺寸和全屏需要作出相应的变化
2、pygame.dispay.Info() #得到当前窗口的相关信息,返回一个信息对象VideoInfo。其中有两个重要的参数
- current_w :当前显示模式或窗口的像素宽度
- current_h:高度
3、pygame.diaplay.set_caption("字符串")
4、pygame.display.get_caption() #用的得到当前窗口的标题,可以与set_caption()搭配使用,实现窗体标题在不同情景下更替
5、pygame.display.set_icon(Surface对象) #设置窗口的图标效果
icon = pygame.image.load("PYG03‐flower.png") pygame.display.set_icon(icon)
6、pygame.diaplay.update() #对当前显示窗口进行更新。与pygame.display,flip()区别是:.update()仅重新绘制窗口中有变化的区域,相比.flip()执行更快。而.flip()需要重新绘制整个窗口
7、pygame.display.get_active() #判断显示窗口是否处于最小化,当最小化时返回False,正常显示时返回True。通过返回值设定相应的响应机制,如游戏暂停等
pygame.Color类用来确定颜色。在pygame中,支持用色彩名字、RGB值(0-255)以及HTML色彩格式定义颜色。此外,pygame还支持RGBA模式,即增加了第四维度:alpha通道。用来表示透明度,通道值越大,不透明度程度越高。默认值为255(不透明)
pygame提供了pygame.event.get()用于从事件队列中取出并删除该事件。我们可以针对不同的事件类型提供相应的相应策略。
例如:当pygame.QUIT:Pygame中定义的退出事件常量触发时,sys.exit()用于响应游戏结束退出,我们还可以在键盘上下左右按键事件触发的时候,设计不同的相应策略进而实现相应的功能。
在接下来的实例中,还要用到的事件常量及其含义如下:
pygame.RESIZABLE(窗口模式下尺寸变动)、pygame.FULLSCREEN(切换为全屏)、pygame.KEYDOWN(键盘输入有效)以及一些键位pygame.K_UP,pygame.K_DOWN等
import pygame,sys
def RGBChannel(a): #计算bgcolor三原色rgb的数值(0-255)
return 0 if a<0 else (255 if a>255 else int(a))
pygame.init()
size=width,height=600,400 #设定窗口指定规格
speed=[1,1]
screen=pygame.display.set_mode(size,pygame.RESIZABLE)
ball=pygame.image.load("caixukun.jpg")
pygame.display.set_caption("Pygame壁球")
pygame.display.set_icon(ball) #改变窗口图标
ballrect=ball.get_rect()
fps=300 #Frames
fclock=pygame.time.Clock() #pygame内置的时钟
still=False
bgcolor=pygame.Color("black")
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_UP:
speed[1]+=1 if speed[1] >= 0 else speed[1]-1
elif event.key == pygame.K_DOWN:
speed[1]-=1 if speed[1] > 0 else speed[1]+1
elif event.key == pygame.K_LEFT:
speed[0] -=1 if speed[0] > 0 else speed[0]+1
elif event.key == pygame.K_RIGHT:
speed[0] +=1 if speed[0] >= 0 else speed[0]-1
elif event.type == pygame.K_ESCAPE:
sys.exit()
elif event.type == pygame.RESIZABLE:
size = width, height = event.size[0], event.size[1] # 得到当前修改后的屏幕分辨率
screen = pygame.display.set_mode(size, pygame.RESIZABLE)
elif event.type == pygame.FULLSCREEN:
size = width, height = event.size[0], event.size[1] # 得到当前修改后的屏幕分辨率
screen = pygame.display.set_mode(size, pygame.FULLSCREEN)
ballrect=ballrect.move(speed)
if pygame.display.get_active():
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]
bgcolor.r=RGBChannel(ballrect.left*255/width)
bgcolor.g=RGBChannel(ballrect.top*255/height)
bgcolor.b=RGBChannel(min(speed[0],speed[1])*255/max(speed[0],speed[1],1))
screen.fill(bgcolor)
screen.blit(ball,ballrect) #在每一次运动中,保证图像跟着矩形运动
pygame.display.update()
fclock.tick(fps)
代码实现功能:
1、可以通过键盘上下左右调控速度
2、在碰到窗口边界反弹
3、根据图片所在区域不同改变背景颜色
来源:慕课-Python游戏开发入门
更新:Python第三方库pygame学习笔记(二)
慢慢爬。。