《Python和Pygame游戏开发指南》——2.15 pygame.PixelArray对象

2.15 pygame.PixelArray对象

遗憾的是没有单个的函数可以调用来设置一个单个像素的颜色(除非你使用相同的起点和终点来调用pygame.draw.line())1。在向一个Surface对象绘制之前和之后,Pygame框架需要在幕后运行一些代码。如果它必须针对想要设置的每一个像素来做这些事情,程序将会运行得慢很多(根据我的快速测试,用这种方式绘制像素,所需时间会是原来的两到三倍)。

相反,应该创建一个Surface对象的pygame.PixelArray对象(我们后面将其简称为PixelArray对象)。创建一个Surface对象的PixelArray对象,将会“锁定”该Surface对象。而当一个Surface对象锁定的时候,仍然能够在其上调用绘制函数,但是,不能够使用blit()方法在其上绘制诸如PNG或JPG这样的图像(本章稍后将会介绍blit()方法)。

如果想要查看一个Surface对象是否锁定了,使用get_locked()方法,如果它锁定了,Surface的get_locked()方法将会返回True,否则的话,返回False。

由pygame.PixelArray()返回的PixelArray对象,可以通过两个索引来访问,从而设置单个的像素。例如,第28行的pixObj480 = BLACK将会把X 坐标为480、Y 坐标为380的点设置为黑色(别忘了,BLACK变量存储的颜色元组是(0, 0, 0))。

要告诉Pygame已经完成了单个像素的绘制,用一条del语句删除掉PixelArray对象,这就是第33行所做的事情。删除PixelArray对象,将会“解锁”Surface对象,以便你可以再次在其上绘制图像。如果忘记了删除PixelArray对象,下一次尝试将一幅图像复制,即绘制到Surface上的时候,程序会导致一条如下所示的错误“pygame.error: Surfaces must not be locked during blit”。

时间: 2024-09-27 20:21:02

《Python和Pygame游戏开发指南》——2.15 pygame.PixelArray对象的相关文章

《Python和Pygame游戏开发指南》——导读

前 言 你好!本书将教你如何使用Python语言和Pygame框架(也叫作Pygame库)来开发图形化的计算机游戏.Pygame使得开发2D图形程序变得很容易.Python和Pygame框架都可以从http://python.org和http://pygame.org 免费下载.你只需要有计算机和这本书,就可以开始开发自己的游戏了. 本书是一本中级编程图书.如果你完全是初次接触编程,你可能需要努力阅读源代码示例并搞清楚程序如何工作.然而,如果你此前学习过如何使用Python编程,这将会容易一些.

《Python和Pygame游戏开发指南》——第2章 Pygame基础知识 2.1 GUI vs. CLI

第2章 Pygame基础知识 Python带有诸如random.math或time这样的几个模块,它们为程序提供额外的功能,同样,Pygame框架也包含了几个模块,其功能包括绘制图形.播放声音.处理鼠标输入等. 本章将介绍Pygame所提供的基本模块和功能,并且假设你已经了解Python编程的基础知识.如果你对理解一些编程概念感到困难,可以阅读我的<Invent Your Own Computer Games with Python>一书,这本书的目标读者是程序设计的完全初学者. <In

《Python和Pygame游戏开发指南》——2.22 播放声音

2.22 播放声音 播放存储在声音文件中的声音,甚至比显示图像文件中的图像还要简单.首先,必须通过调用pygame.mixer.Sound()构造函数,来创建一个pygame.mixer.Sound对象(后面我们将其简称为Sound对象).它接受一个字符串参数,这是声音文件的文件名.Pygame可以加载WAV.MP3或OGG文件.http://invpy.com/formats 介绍了这些声音文件格式的区别. 要播放声音,调用Sound对象的play()方法.如果想要立即停止Sound对象播放,

《Python和Pygame游戏开发指南》——2.18 帧速率和pygame.time.Clock对象

2.18 帧速率和pygame.time.Clock对象 帧速率(frame rate)或刷新速率(refresh rate)是程序每秒钟绘制的图像的数目,用FPS或帧/秒来度量(在计算机显示器上,FPS常见的名称是赫兹.很多显示器的帧速率是60Hz,或者说每秒60帧).视频游戏中,较低的帧速率会使得游戏看上去抖动或卡顿.如果游戏包含的代码太多了,以至于无法运行来频繁地绘制到屏幕上,那么,FPS会下降.但是,本书中的游戏都足够简单,甚至在较旧的计算机上也不会有问题. pygame.time.Cl

《Python和Pygame游戏开发指南》——2.19 用pygame.image.load()和blit()绘制图像

2.19 用pygame.image.load()和blit()绘制图像 如果你想要在屏幕上绘制简单的形状,绘制函数已经很好用了,但是,很多游戏都有图像(也叫作精灵,sprite).Pygame能够从PNG.JPG.GIF和BMP图像文件中,将图像加载到Surface对象上.这些图像文件格式的区别参见http://invpy.com/formats. 猫的图像存储在一个名为cat.png 的文件中.要加载这个文件的图像,将字符串'cat.png'传递给pygame.image.load()函数.

《Python和Pygame游戏开发指南》——2.6 QUIT事件和pygame.quit()函数

2.6 QUIT事件和pygame.quit()函数 Event对象有一个名为type的成员变量(member variable,也叫作属性,attributes或properties),它告诉我们对象表示何种事件.针对pygame.locals模块中的每一种可能的类型,Pygame都有一个常量变量.第9行检查Event对象的type是否等于常量QUIT.记住,由于我们使用了from pygame.locals import *形式的import语句,主要输入QUIT就可以了,而不必输入pyga

《Python和Pygame游戏开发指南》——2.3 建立一个Pygame程序

2.3 建立一个Pygame程序 Hello World的前几行,几乎在你使用Pygame编写的每一个程序中都会用作开头的几行. 第1行是一条简单的import语句,它导入pygame和sys模块,以便我们可以在程序中使用这些模块中的函数.Pygame所提供的所有那些处理图形.声音以及其他功能的Pygame函数,都位于pygame模块中. 当导入pygame模块的时候要注意,你也会自动地导入位于pygame模块之中的所有模块,如pygame.images和pygame.mixer.music.不

《Python和Pygame游戏开发指南》——2.5 pygame.event.Event对象

2.5 pygame.event.Event对象 任何时候,当用户做了诸如按下一个按键或者把鼠标移动到程序的窗口之上等几个动作之一(在本章后面会列出这些动作),Pygame库就会创建一个pygame.event.Event对象来记录这个动作,也就是"事件"(这种叫作Event的对象,存在于event模块中,该模块本身位于pygame模块之中).我们可以调用pygame.event.get()函数来搞清楚发生了什么事件,该函数返回pygame.event.Event对象(为了简单起见,我

《Python和Pygame游戏开发指南》——1.7 安装Pygame

1.7 安装Pygame Pygame不是Python所附带的.和Python一样,Pygame也是可以免费使用的.你必须下载并安装Pygame,这与下载和安装Python解释器一样容易.在Web浏览器中,访问http://pygame.org 并且在该Web站点左边的"Downloads"上点击.本书假设你使用的是Windows操作系统,但是Pygame在每种操作系统上的工作方式都是相同的.你需要针对自己的操作系统以及所安装的Python版本,下载相应的Pygame安装程序. 你不需