• 1.pygame第一步


    pygame框架简介

    对于pygame的介绍,在网上真的基本上千篇一律,大多会感慨感谢一下作者,惋惜一下这个包在09年的时候就停止更新(但是它神奇地在17年1月份更新了)。真正的它的意义,很少人提及。下面引用一下《pygame菜鸟入门指南》里的一段介绍:

    pygame是一个由Pete Shinners编写的SDL的Python封装。这就意味着,使用pygame,你可以写出可以不作修改就可以在任何支持SDL的平台(Windows, Unix, Mac, BeOS,等等)上运行的游戏或者多媒体程序。

    简单的理解一下,它的底层是使用C编写的SDL(simple DirectMedia Layer)。提供了多种控制凸显个、声音、输出入得函数。让开发者是要用相同或者是相似的代码就可以开发出跨多个平台(linux、windows、mac OS X等)的应用软件。目前SDL多用于开发游戏,模拟器,媒体播放器等多媒体应用领域……

    SDL内置调用了OpenGL的函数。……SDL也有其他语言的包装,SDL用C语言写成,但是很容易在C++下工作,并且绑定了许多其他的语言……包装的比较好的是python语言的pygame……

    在我省略了好多……之后,pygame和SDL和OpenGL的关系渐渐明朗了起来。虽然没有对pygame的能力有很详细的描述,但是也能简单了解它的主要应用场景和主要的功能。

    安装

    超简单,如果有完整的python开发环境,这个应该不是什么问题。

    pip install pygame
    

    模块列表

    模块名 功能
    pygame.cdrom 访问光驱
    pygame.cursors 加载光标
    pygame.display 访问显示设备
    pygame.draw 绘制形状、线和点
    pygame.event 管理事件
    pygame.font 使用字体
    pygame.image 加载和存储图片
    pygame.joystick 使用游戏手柄或者类似的东西
    pygame.key 读取键盘按键
    pygame.mixer 声音
    pygame.mouse 鼠标
    pygame.movie 播放视频
    pygame.music 播放音频
    pygame.overlay 访问高级视频叠加
    pygame.rect 管理矩形区域
    pygame.sndarry 操作声音数据
    pygame.sprite 操作移动图像
    pygame.surface 管理图像和屏幕
    pygame.surfarry 管理点阵图像数据
    pygame.time 管理时间和帧信息
    pygame.transform 缩放和移动图像

    其中一些我觉得比较重要的或者在初级使用阶段会经常碰到的一些字段,我都添加了标记,在之后的学习中可以重点关注一下这一块的源码。

    有些模块可能在某些平台上不存在(有这个名称字段,但是为空),可以用None判断一下。

    In [3]: pygame.font is None
    Out[3]: False
    

    详解一个简单的pygame程序

    background_image_filename = 'sushiplate.jpg'
    mouse_image_filename = 'fugu.png'
    #指定图像文件名称
    
    import pygame
    #导入pygame库
    from pygame.locals import *
    #导入一些常用的函数和常量
    from sys import exit
    #向sys模块借一个exit函数用来退出程序
    
    pygame.init()
    #初始化pygame,为使用硬件做准备
    
    screen = pygame.display.set_mode((640, 480), 0, 32)
    #创建了一个窗口
    pygame.display.set_caption("Hello, World!")
    #设置窗口标题
    
    background = pygame.image.load(background_image_filename).convert()
    mouse_cursor = pygame.image.load(mouse_image_filename).convert_alpha()
    #加载并转换图像
    
    while True:
    #游戏主循环
    
        for event in pygame.event.get():
            if event.type == QUIT:
                #接收到退出事件后退出程序
                exit()
                #这个负责监听事件的循环非常重要,是event模块在pygame程序中最频繁的使用
    
        screen.blit(background, (0,0))
        #将背景图画上去  blit(图片源,起始点)
    
        x, y = pygame.mouse.get_pos()
        #获得鼠标位置
        x-= mouse_cursor.get_width() / 2
        y-= mouse_cursor.get_height() / 2
        #计算光标的左上角位置
        screen.blit(mouse_cursor, (x, y))
        #把光标画上去
    
        pygame.display.update()
        #刷新一下画面
    

    上面的程序其实注释已经非常详尽了,我们有几点需要注意的:

    • set_mode():他会返回一个surface对象,代表了在桌面上出现的那个窗口,从源码中可以看到:
    set_mode(resolution=(0,0), flags=0, depth=0) -> Surface
       Initialize a window or screen for display
    

    它需要三个参数,resolution就是分辨率,flags就是标志位,depth是色深
    分辨率很好理解暂时就不多BB了,flags具体见下表,如果不需要什么特性,就0

    标志位 功能
    FULLSCREEN 创建一个全屏窗口
    DOUBLEBUF 创建一个“双缓冲”窗口,建议在HWSURFACE或者OPENGL时使用
    HWSURFACE 创建一个硬件加速的窗口,必须和FULLSCREEN同时使用
    OPENGL 创建一个OPENGL渲染的窗口
    RESIZABLE 创建一个可以改变大小的窗口
    NOFRAME 创建一个没有biang狂的窗口

    convert函数试讲图像数据都转化为surface对象,每次加载完图像以后就应该做这件事件(使用频率很高,如果你不写,pygame也会帮你写);convert_alpha相比convert保留了ALPHA通道信息(就简单理解为透明的部分),这样就可以获得PNG图标的效果。

    blit是一个重要函数。第一个参数是一个surface对象,第二个为左上角位置,画完一个后要记得update更新一下,否则会出现画面一片漆黑的情况。

    blit(source, dest, area=None, special_flags = 0) -> Rect
            draw one image onto another
    
  • 相关阅读:
    获取当前页URL函数
    Windows下搭建PHP开发环境
    Details: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed,SSL报错
    微信接口随笔
    老毛桃安装系统,最正确的快速的思路和办法
    老毛桃制作U盘启动盘
    十进制与三十六机制 互转 PHP代码
    Linux环境下修改GIT的用户名和邮箱
    Warning: DOMDocument::loadHTML() [domdocument.loadhtml]: htmlParseEntityRef: expecting ';' in Entity,
    如何保证库存数量及时
  • 原文地址:https://www.cnblogs.com/scott-lv/p/7808507.html
Copyright © 2020-2023  润新知