pygame学习
✕
上次学会了初始化,这次来说下显示画面
初始化窗口或屏幕以进行显示
代码语言:javascript复制'''
pygame.display.set_mode 一共三个参数,依次为:分辨率,显示模式,颜色位数;返回窗口数据
'''
pygame.display.set_mode(resolution, flags=0, depth=0, display=0): return Surface
这个函数创建一个显示画面,参数用来指定请求display的类型。实际创建的display会是系统支持的类型中与请求的尽可能一致的类型。
显示窗口设置的参数如下;resolution :参数是一个元祖,值为窗口的宽高flags :参数是显示模式(可以使用 ‘&’ 或者 '|’ 来一次设置两个, 传入0则使用默认值)
- pygame.FULLSCREEN:创建画面全屏
- pygame.DOUBLEBUF:使用HWSURFACE或OPENGL是加上这个标志
- pygame.HWSURFACE:使用硬件加速,在使用FULLSCREEN
- pygame.OPENGL:创建一个可以使用opengl的display(不太理解Open的作用)
- pygame.RESIZABLE:的窗口可变大小
- pygame.NOFRAME:窗口没有边框和控制条
depth:参数表示颜色的位数 你也可以添其他的,常见的有;
- 8 bits 256 色
- 15 bits 32,768 色
- 16 bits 65,536 色
- 24 bits 16.7 百万色
- 32 bits 16.7 百万色
display:官网没找到说明
Surface返回的内容为<Surface(宽X高 SW)>
获取可用的全屏模式列表
代码语言:javascript复制pygame.display.list_modes(depth=0, flags=pygame.FULLSCREEN)
如果给定的参数没有显示模式可用,那么会返回一个空的列表,列表中的模式按照分辨率从大到小排列。如果返回-1表示任何分辨率都可以用(这可能是因为指定的是窗口模式)。如果depth是0,SDL会自动选择当前或最好的颜色深度。flags参数默认 是pygame.FULLSCREEN,你可以添加额外的选项。
为显示模式选择最佳颜色深度
代码语言:javascript复制pygame.display.mode_ok(size,flags = 0,depth = 0,display = 0) - > depth
选择一个最好的颜色深度
这 个函数使用和pygame.display.set_mode相同的参数。它用来确定请求的模式是否可用。如果指定的模式不能使用,它会返回0,否则它会 返回一个最佳的颜色深度,通常depth参数不会被使用。然而某些平台上支持多种颜色深度都同样好,传递这个参数用来指定哪个是更好的。最有用的 flags是pygame.HWSURFACE、pygame.DOUBLEBUF和pygame.FULLSCREEN。如果被请求的flags不能够 设置,函数会返回0。
代码语言:javascript复制 # 一般情况我们都只是设置一个固定大小的窗口
# screen = pygame.display.set_mode(win)
# 窗口全屏 窗口大小为0,0,分辨率与桌面分辨率相同
# screen = pygame.display.set_mode((0,0),flags=pygame.FULLSCREEN)
# 没有窗口图标
# screen = pygame.display.set_mode(win,flags=pygame.HWSURFACE)
# 使用‘&’来打开一个open窗口并且使用硬件加速
# screen = pygame.display.set_mode(win,flags=pygame.OPENGL&pygame.DOUBLEBUF)
# 使用的窗口可变大小
# screen = pygame.display.set_mode(win,pygame.RESIZABLE)
# 窗口没有边框和控制条
# screen = pygame.display.set_mode(win,pygame.NOFRAME)
# display 参数不明
# screen = pygame.display.set_mode(win,display=1)
代码语言:javascript复制pygame.display.set_mode((100, 100))
类似我们建立一个画布
画布的尺寸是100 x 100
这里设置下窗口的标题
代码语言:javascript复制pygame.display.set_caption('标题内容!')
设置窗口的背景色
代码语言:javascript复制# RGB颜色设置,中间是个元祖
screen.fill((0, 0, 0))
今天的代码:
代码语言:javascript复制import pygame
from pygame.locals import *
def rungame():
# 分辨率 800 * 600
win = (800, 600)
# 一般情况我们都只是设置一个固定大小的窗口
screen = pygame.display.set_mode(win)
# 窗口全屏 窗口大小为0,0,分辨率与桌面分辨率相同
# screen = pygame.display.set_mode((0,0),flags=pygame.FULLSCREEN)
# 没有窗口图标
# screen = pygame.display.set_mode(win,flags=pygame.HWSURFACE)
# 使用‘&’来打开一个open窗口并且使用硬件加速
# screen = pygame.display.set_mode(win,flags=pygame.OPENGL&pygame.DOUBLEBUF)
# 使用的窗口可变大小
# screen = pygame.display.set_mode(win,pygame.RESIZABLE)
# 窗口没有边框和控制条
# screen = pygame.display.set_mode(win,pygame.NOFRAME)
# display 参数不明
# screen = pygame.display.set_mode(win,display=1)
# 设置当前窗口标题
pygame.display.set_caption('窗口学习!')
print(screen)
# 32位色全屏分辨率
# list_modes = pygame.display.list_modes(depth=0, flags=pygame.FULLSCREEN)
# print(list_modes)
# 不指定都可用 返回-1
list_modes = pygame.display.list_modes(depth=0, flags=0)
print(list_modes)
# 为显示模式选择最佳颜色深度
depth = pygame.display.mode_ok(win,flags = 0,depth =0,display = 0) # 32
print(depth)
# 设置窗口背景色
screen.fill((20, 20, 20))
# 开启一个事件循环处理发生的事件
while True:
# 从消息队列中获取事件并对事件进行处理
for event in pygame.event.get():
if event.type == KEYDOWN:
if event.key==K_q:
print('你按下了Q')
exit(0)
# 鼠标点击了窗口的关闭按钮
if event.type == pygame.QUIT:
# 退出界面
pygame.quit()
print('你点了关闭!')
exit(0)
# 更新画面
pygame.display.update()
def main():
# 初始化导入的pygame中的模块
pygame.init()
rungame()
if __name__ == "__main__":
main()