热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

5.PygameSurface创建图像

通过前面内容的介绍,我们对Surface对象有了大体上的认识。Pygame针对文本、图像、颜色提供了不同模块来生成它们各自的Surface对象。Surface模块是Pygame中专

通过前面内容的介绍,我们对 Surface 对象有了大体上的认识。Pygame 针对文本、图像、颜色提供了不同模块来生成它们各自的 Surface 对象。Surface 模块是Pygame 中专门用来新建图像的,通过该模块可以创建一个 Surface 对象,语法格式如下:

Surface=pygame.Surface(size=(width,height),flags,depth)

参数函数如下:



  • size:表示 Surface 对象的矩形区域大小;

  • flags:功能标志位,有两个可选参数值 HWSURFACE 和 SPCALPHA,前者代表将创建的 Surface 对象存放于显存中,后者表示让图像的每一个像素都包含一个 alpha  通道

  • depth:指定像素的颜色深度,默认为自适应模式,由 Pygame 自动调节。

下面看一组简单的使用示例,如下所示:



  • import sys

  • import pygame

  •  

  •  

  • #使用pygame之前必须初始化

  • pygame.init()

  • #设置主屏窗口 ;设置全屏格式:flags=pygame.FULLSCREEN

  • screen = pygame.display.set_mode((400,400))

  • #设置窗口标题

  • pygame.display.set_caption('c语言中文网')

  • screen.fill('white')

  • #创建一个 50*50 的图像,并优化显示

  • face = pygame.Surface((50,50),flags=pygame.HWSURFACE)

  • #填充颜色

  • face.fill(color='pink')

  •  

  • while True:

  • # 循环获取事件,监听事件

  • for event in pygame.event.get():

  • # 判断用户是否点了关闭按钮

  • if event.type == pygame.QUIT:

  • #卸载所有模块

  • pygame.quit()

  • #终止程序

  • sys.exit()

  • # 将绘制的图像添加到主屏幕上,(100,100)是位置坐标,显示屏的左上角为坐标系的(0,0)原点

  • screen.blit(face, (100, 100))

  • pygame.display.flip() #更新屏幕内容

最终的显示结果如下:

pygame surface对象
图1:程序运行结果

从上述运行结果可以看出,通过 Surface 模块,我们成功的在主屏幕上绘制一个 50 * 50 的矩形区域。注意,如果不设置尺寸,Surface 默认创建一个和主游戏屏幕同样大小的区域。

Surface 模块还提供了处理图像的其他方法,下表对它们做了简单的介绍。





























































方法说明
pygame.Surface.blit() 将一个图像(Surface 对象)绘制到另一个图像上
pygame.Surface.convert() 修改图像(Surface 对象)的像素格式
pygame.Surface.fill()  使用纯色填充 Surface 对象
pygame.Surface.scroll() 复制并移动 Surface 对象
pygame.Surface.set_alpha() 设置整个图像的透明度
pygame.Surface.get_at() 获取一个像素的颜色值
pygame.Surface.set_at() 设置一个像素的颜色值
pygame.Surface.get_palette()获取 Surface 对象 8 位索引的调色板
pygame.Surface.map_rgb()  将一个 RGBA 颜色转换为映射的颜色值
pygame.Surface.set_clip() 设置该 Surface 对象的当前剪切区域
pygame.Surface.subsurface()  根据父对象创建一个新的子 Surface 对象
pygame.Surface.get_offset()获取子 Surface 对象在父对象中的偏移位置
pygame.Surface.get_size()获取 Surface 对象的尺寸

除了使用 Surface 模块新建图像外,我们还可以使用另外一种方法从外部加载图像,如下所示:

pygame.image.load("图片路径").convert()

上述方法将被加载的图像作为 Surface 对象来使用,因此它可以调用上述表格中所有方法。注意,此处之所以使用 convert()来转换被加载图片的像素格式,是为了提升 Pygame 对图片的处理速度,该操作能够保证图像的像素格式与图片的显示格式是相同的。

通过 image.load() 方法可以加载游戏的背景图,或者游戏中使用的其他元素,比如的人物、道具等等。

下面看一组简单的示例:



  • import pygame

  • #引入pygame中所有常量,比如 QUIT

  • from pygame.locals import *

  •  

  • pygame.init()

  • screen = pygame.display.set_mode((500,250))

  • pygame.display.set_caption('c语言中文网')

  • #加载一张图片

  • image_surface = pygame.image.load("C:/Users/Administrator/Desktop/c-net.png").convert()

  •  

  • # rect(left,top,width,height)指定图片上某个区域

  • # special_flags功能标志位,指定颜色混合模式,默认为 0 表示用纯色填充

  • image_surface.fill((0,0,255),rect=(100,100,100,50),special_flags=0)

  • # 200,100 表示图像在水平、垂直方向上的偏移量,以左上角为坐标原点

  • image_surface.scroll(100,50)

  • # 无限循环,让窗口停留

  • while True:

  • for event in pygame.event.get():

  • if event.type == QUIT:

  • exit()

  • # 将图像放置在主屏幕上

  • screen.blit(image_surface,(0,0))

  • pygame.display.update()

程序运行结果如下所示:

pygame运行程序
图2:程序运行结果



推荐阅读
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • Python 异步编程:深入理解 asyncio 库(上)
    本文介绍了 Python 3.4 版本引入的标准库 asyncio,该库为异步 IO 提供了强大的支持。我们将探讨为什么需要 asyncio,以及它如何简化并发编程的复杂性,并详细介绍其核心概念和使用方法。 ... [详细]
  • 深入解析Android自定义View面试题
    本文探讨了Android Launcher开发中自定义View的重要性,并通过一道经典的面试题,帮助开发者更好地理解自定义View的实现细节。文章不仅涵盖了基础知识,还提供了实际操作建议。 ... [详细]
  • 前言--页数多了以后需要指定到某一页(只做了功能,样式没有细调)html ... [详细]
  • 本文详细介绍了Akka中的BackoffSupervisor机制,探讨其在处理持久化失败和Actor重启时的应用。通过具体示例,展示了如何配置和使用BackoffSupervisor以实现更细粒度的异常处理。 ... [详细]
  • Explore how Matterverse is redefining the metaverse experience, creating immersive and meaningful virtual environments that foster genuine connections and economic opportunities. ... [详细]
  • 本文详细介绍如何使用Python进行配置文件的读写操作,涵盖常见的配置文件格式(如INI、JSON、TOML和YAML),并提供具体的代码示例。 ... [详细]
  • 技术分享:从动态网站提取站点密钥的解决方案
    本文探讨了如何从动态网站中提取站点密钥,特别是针对验证码(reCAPTCHA)的处理方法。通过结合Selenium和requests库,提供了详细的代码示例和优化建议。 ... [详细]
  • This guide provides a comprehensive step-by-step approach to successfully installing the MongoDB PHP driver on XAMPP for macOS, ensuring a smooth and efficient setup process. ... [详细]
  • 本文介绍了Java并发库中的阻塞队列(BlockingQueue)及其典型应用场景。通过具体实例,展示了如何利用LinkedBlockingQueue实现线程间高效、安全的数据传递,并结合线程池和原子类优化性能。 ... [详细]
  • 1.如何在运行状态查看源代码?查看函数的源代码,我们通常会使用IDE来完成。比如在PyCharm中,你可以Ctrl+鼠标点击进入函数的源代码。那如果没有IDE呢?当我们想使用一个函 ... [详细]
  • Python自动化处理:从Word文档提取内容并生成带水印的PDF
    本文介绍如何利用Python实现从特定网站下载Word文档,去除水印并添加自定义水印,最终将文档转换为PDF格式。该方法适用于批量处理和自动化需求。 ... [详细]
  • 本文探讨了如何在给定整数N的情况下,找到两个不同的整数a和b,使得它们的和最大,并且满足特定的数学条件。 ... [详细]
  • 本文介绍如何使用 Python 提取和替换 .docx 文件中的图片。.docx 文件本质上是压缩文件,通过解压可以访问其中的图片资源。此外,我们还将探讨使用第三方库 docx 的方法来简化这一过程。 ... [详细]
  • 2018年3月31日,CSDN、火星财经联合中关村区块链产业联盟等机构举办的2018区块链技术及应用峰会(BTA)核心分会场圆满举行。多位业内顶尖专家深入探讨了区块链的核心技术原理及其在实际业务中的应用。 ... [详细]
author-avatar
破晓晨曦
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有