Python之pygame学习(2)

2019-08-09 13:56:45 浏览数 (1)

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()

0 人点赞