zoukankan      html  css  js  c++  java
  • pygame的使用

    Pygame的历史

    Pygame是一个利用SDL库的写就的游戏库,SDL呢,全名Simple DirectMedia Layer,是一位叫做Sam Lantinga的大牛写的,据说他为了让Loki(致力于向Linux上移植Windows的游戏的一家大好人公司,可惜已经倒闭,唉好人不长命啊……)更有效的工作,创造了这个东东。

    SDL是用C写的,不过它也可以使用C++进行开发,当然还有很多其它的语言,Pygame就是Python中使用它的一个库。Pygame已经存在很多时间了,许多优秀的程序员加入其中,把Pygame做得越来越好。

    安装Pygame

    可以从www.pygame.org下载pygame,选择合适你的操作系统和合适的版本,当然你也可以使用pip安装。安装成功后可用下面方法确认有没有安装成功:

    >>>import pygame
    pygame 1.9.6
    Hello from the pygame community. https://www.pygame.org/contribute.html
    >>>

    另外说一下,就产品而言,Pygame更致力于2D游戏的开发,也就是说,你可以用Pygame写一个植物大战僵尸,但是写一个魔兽世界则相当困难……请不要做出鄙夷的目光,底层的东西永远是相通的,而且对于新手而言,从简单的2D入手才是正途。

    使用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.sndarray                             操作声音数据
    pygame.sprite                                  操作移动图像
    pygame.surface                             管理图像和屏幕
    pygame.surfarray                         管理点阵图像数据
    pygame.time                                 管理时间和帧信息
    pygame.transform                           缩放和移动图像
    有些模块可能在某些平台上不存在,你可以用None来测试一下。

    if pygame.transform is None:
        print 'The transform module is not available!'
        exit()

    Hello Pygame
    刚开始学习一门编程语言的时候总会写一个Hello World程序,但那只是在终端上打印一句话,现在我们来点更帅的!写好以后会是这样子的效果:

     代码如下:

    # _*_ coding: utf-8 _*_
    import pygame
    
    from pygame.locals import *
    from sys import exit
    background_image_filename = 'sea.jpg'
    mouse_image_filename = 'fish.png'
    
    # 初始化pygame,为使用硬件做准备
    pygame.init()
    
    # 创建一个窗口
    screen = pygame.display.set_mode((640, 480), 0, 32)
    
    # 设置窗口标题
    pygame.display.set_caption("hello,world!")
    
    # 加载图片并转换
    background = pygame.image.load(background_image_filename)
    mouse_cursor = pygame.image.load(mouse_image_filename)
    
    # 游戏主循环
    while True:
        for event in pygame.event.get():
            if event.type == QUIT:
                # 接收到退出时间后退出程序
                exit()
    
        # 将背景图画上去
        screen.blit(background, (0, 0))
    
        # 获得鼠标位置
        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()

    这段代码中用到了两张图片,图片可以从网上找,让后用ps简单修改一下就行。(sea.jpg是背景,fish.png是黄色小鱼,fish.png是我用ps抠出来的,背景是透明的)

    下面稍微解释一下比较重要的部分:

    set_mode会返回一个Surface对象,代表了在桌面上出现的那个窗口,三个参数第一个为元祖,代表分 辨率(必须);第二个是一个标志位,具体意思见下表,如果不用什么特性,就指定0;第三个为色深。

    标识位                                                      功能
    FULLSCREEN                                  创建一个全屏窗口
    DOUBLEBUF                              创建一个“双缓冲“窗口,建议在HWSURFACE或OPENGL时使用
    HWSURFACE                             创建一个硬件加速窗口,必须和FULLSCREEN同时使用
    OPENGL                                     创建一个OPENGL渲染的窗口
    RESIZABLE                                创建一个可以改变大小的窗口
    NOFRAME                                  创建一个没有边框的窗口
    convert函数是将图像数据都转化为Surface对象,每次加载完图像以后就应该做这件事件(事实上因为 它太常用了,如果你不写pygame也会帮你做);convert_alpha相比convert,保留了Alpha 通道信息(可以简单理解为透明的部分),这样我们的光标才可以是不规则的形状。

    游戏的主循环是一个无限循环,直到用户跳出。在这个主循环里做的事情就是不停地画背景和更新光标位置,虽然背景是不动的,我们还是需要每次都画它, 否则鼠标覆盖过的位置就不能恢复正常了。

    blit是个重要函数,第一个参数为一个Surface对象,第二个为左上角位置。画完以后一定记得用update更新一下,否则画面一片漆黑。

    这就是一个pygame程序的大致流程,接下来我们会学习更多深层次的东西,并且把各条语句都真正的读懂。
    参考:https://blog.csdn.net/qq_38526635/article/details/82688786

  • 相关阅读:
    Java中IO流的总结
    Java常用集合体系以及相互区别
    TreeMap集合特点、排序原理
    HashMap集合
    TreeSet集合
    redis 数据类型详解 以及 redis适用场景场合
    You need tcl 8.5 or newer in order to run the Redis test
    PHP 获取二维数组中某个key的集合
    Linux 定时任务
    phpmailer邮件类
  • 原文地址:https://www.cnblogs.com/jiangxiaobo/p/12286425.html
Copyright © 2011-2022 走看看