版本1和24间的区别 (跳过第23版)
于2006-09-29 14:46:13修订的的版本1
大小: 3837
编辑: czk
备注:
于2006-10-11 21:33:17修订的的版本24
大小: 20835
编辑: czk
备注:
删除的内容标记成这样。 加入的内容标记成这样。
行号 1: 行号 1:
[[TableOfContents]]
行号 3: 行号 5:
表示图像的pygame对象

{{{
pygame.Surface((width, height), flags=0, depth=0, masks=None): return Surface
pygame.Surface((width, height), flags=0, Surface): return Surface
}}}
行号 7: 行号 16:
像素格式可以通过指定像素深度或者已有的Surface来控制。flag标志位参数是其他一些Surface选项的集合,你可以指定如下的标志

  HWSURFACE, 在视频内存中创建图像
  SRCALPHA, 像素格式中会包含一个alpha通道
像素格式可以通过指定像素深度或者已有的Surface来控制。flags标志位参数是其他一些Surface选项的集合,你可以指定如下的标志

 * HWSURFACE, 在视频内存中创建图像
 * SRCALPHA, 像素格式中会包含一个alpha通道
行号 14: 行号 23:
Advance users can combine a set of bitmasks with a depth value. The masks are a set of 4 integers representing which bits in a pixel will represent each color. Normal Surfaces should not require the masks argument.

Surfaces can have many extra attributes like alpha planes, colorkeys, source rectangle clipping. These functions mainly effect how the Surface is blitted to other Surfaces. The blit routines will attempt to use hardware acceleratio

 when possible, otherwise will use highly optimized software blitting methods.

There are three types of transparency supported in Pygame: colorkeys, surface alphas, and pixel alphas. Surface alphas can be mixed with colorkeys, but an image with per pixel alphas cannot use the other modes. Colorkey transparency makes a single color value transparent. Any pixels matching the colorkey will not be drawn. The surface alpha value is a single value that changes the transparency for the entire image. A surface alpha of 255 is opaque, and a value of 0 is completely transparent.

Per pixel alphas are different because they store a transparency value for every pixel. This allows for the most precise transparency effects, but it also the slowest. Per pixel alphas cannot be mixed with surface alpha and colorkeys.

There is support for pixel access for the Surfaces. Pixel access on hardware surfaces is slow and not recommended. Pixels can be accessed using the get_at() and set_at() functions. These methods are fine for simple access, but will be considerably slow when doing of pixel work with them. If you plan on doing a lot of pixel level work, it is recommended to use the pygame.surfarray module, which can treat the surfaces like large multidimensional arrays (and it's quite quick).

Any functions that directly access a surface's pixel data will need that surface to be lock()'ed. These functions can lock() and unlock() the surfaces themselves without assistance. But, if a function will be called many times, there will be a lot of overhead for multiple locking and unlocking of the surface. It is best to lock the surface manually before making the function call many times, and then unlocking when you are finished. All functions that need a locked surface will say so in their docs. Remember to leave the Surface locked only while necessary.

Surface pixels are stored internally as a single number that has all the colors encoded into it. Use the Surface.map_rgb - convert a color into a mapped color value and Surface.unmap_rgb - convert a mapped integer color value into a Color to convert between individual red, green, and blue values into a packed integer for that Surface.

Surfaces can also reference sections of other Surfaces. These are created with the Surface.subsurface - create a new surface that references its parent method. Any change to either Surface will effect the other.

Each Surface contains a clipping area. By default the clip area covers the entire Surface. If it is changed, all drawing operations will only effect the smaller area.
高级用户可以组合一组颜色屏蔽位,masks是4个整数的集合,表示像素里的哪个位用来表示一种颜色。一般的Surface不需要masks参数。

Surface可以有一些额外的属性,比如alpha平面、透明色、源矩形剪切。这些功能主要影响一个Surface如何被blit到其它的Surface。如果可能的话,blit函数会尝试使用硬件加速,否则就会使用优化的软件blit方法。

pygame支持三种类型的透明:透明色(colorkey),Surface alpha和每像素alpha。Surface alpha可以和透明色(colorkey)混合使用,但是有像素alpha的图像不能够使用其它模式。透明色(colorkey)让一种颜色值透明。任何和这个颜色相同的像素都不会被画出来。Surface alpha值是单独一个值用来改变整个图像的透明度。Surface alpha值是255表示不透明,值是0表示全透明。

而每像素alpha是不一样的,它为每个像素保存了一个透明值。这种方法允许精确的控制透明效果,但是这种方法也是最慢的。每像素alpha不能和其它方法混用。

Surface支持对单个像素的访问。访问硬件surface的像素是比较慢的,推荐不要这样做。像素可以由get_at()和set_at()函数访问。用这些函数做一些简单的操作是很好的,但是做比较复杂的像素操作就比较慢了。如果你打算做很多像素级的工作,你最好使用pygame.surfarray模块,它可以把surface像多维数组一样使用(而且比较快)。

任何直接访问Surface的像素数据的函数都要求先锁定(lock())。这些函数可以自动调用lock()和unlock()完成加锁和解锁。但是如果一个函数被调用很多次,那么就会有很多多余的加锁和解锁操作。最好是在多次使用这个函数之前,手动锁定Surface,并在结束时手动解锁。所有的需要解锁的函数的文档里面都会这样说。记住,只在需要的时候才锁住Surface。

Surface的数据在内部是表示成一个数字,包含所有的颜色。使用Surface.map_rgb和Surface.unmap_rgb来在独立的红绿蓝值和Surface的内部表示值之间的转换。

一个Surface可以引用另一个Surface的一部分。这通过Surface.subsurface函数创建。改变任何一个Surface都会影响其它的Surface。

每个Surface包含一个剪切区域。默认情况下,剪切区域是整个Surface。如果改变了剪切区域,所有的画图操作都会限制在一个比较小的范围之内。

== Surface.blit ==

把一个图像画到另一个上面
{{{
Surface.blit(source, dest, area=None, special_flags = 0): return Rect
}}}

把源Surface画到这个Surface上。画的位置可以由dest参数指定。dest可以是一对坐标值,表示源Surface的左上角在这个Surface上的坐标。dest也可以是一个矩形,矩形的左上角作为blit的位置,而矩形的大小不影响blit。

有一个可选的area矩形参数,可以用来指定只画源Surface的一部分。

一个可选的special_flags参数,可以是BLEND_ADD、BLEND_SUB、BLEND_MULT、BLEND_MIN、BLEND_MAX。将来也可能有其它特殊标记添加进来。

返回的矩形表示受影响的像素的区域,不包括目标Surface以外的像素,也不包括剪切区域以外的像素。

如果blit到一个8位的Surface上,像素的alpha值会被忽略。

special_flags是在pygame 1.8中新增的。

== Surface.convert ==
改变图像的像素格式
{{{
Surface.convert(Surface): return Surface
Surface.convert(depth, flags=0): return Surface
Surface.convert(masks, flags=0): return Surface
Surface.convert(): return Surface
}}}
创建一个像素格式不一样的新的Surface。新的像素格式可以由现存其它Surface确定,也可以由depth,flags或者masks决定。这些参数和pygame.Surface的参数类似。

如果没有参数,新的Surface会和display Surface的像素格式一样。这是画图最快的格式。转换所有需要多次blit的Surface是一个好主意。

转换出来的Surface不会有像素alpha。如果原来的Surface里面有,他们会被去掉。参看Surface.convert_alpha来保留或者创建每像素alpha。

== Surface.copy ==
创建一个Surface的拷贝
{{{
Surface.copy(): return Surface
}}}
创建一个Surface的复制品。新创建的Surface和原来的Surface有相同的像素格式、调色板和透明设置。

== Surface.fill ==

用一个颜色填充Surface
{{{
Surface.fill(color, rect=None): return Rect
}}}
用一种颜色填充Surface。如果没有给定rect参数,整个Surface会被填充。rect参数会限制备填充的区域。填充区域同样受到Surface的剪切区域的影响。

颜色参数可以是RGB序列或者是颜色索引值。

这个函数会返回受影响的Surface区域。

== Surface.set_colorkey ==

设置透明色colorkey
{{{
Surface.set_colorkey(Color, flags=0): return None
Surface.set_colorkey(None): return None
}}}
设置Surface的透明色。当把这个Surface blit到令一个Surface时候,和这个透明色颜色相同的像素会变成透明。color参数可以是RGB颜色或者是一个映射的整数。如果传送的是None,则Surface会没有透明色。

如果是有每像素透明的Surface,透明色会被忽略。透明色可以和Surface alpha混合使用。

可选的flags参数可以是pygame.RLEACCEL,用来在没有加速的时候提供更好的性能。设置了RLEACCEL的Surface作为源Surface blit更快,但是修改Surface的内容会更慢。


== Surface.get_at ==

获得特定像素点的颜色值
{{{
Surface.get_at((x, y)): return Color
}}}

返回指定像素的RGBA颜色值。如果Surface没有每像素alpha,alpha值总是255(不透明)。如果像素位置在Surface的区域以外,会引发一个IndexError异常。

在游戏和实时模拟中,一次取得和设置一个像素是很慢的。

这个函数会根据需要临时加锁和解锁Surface。

== Surface.set_at ==

设置特定像素点的颜色值
{{{
Surface.set_at((x, y), Color): return None
}}}

为一个像素设置RGBA或者映射的整数颜色值。如果Surface没有每像素alpha,alpha值会被忽略。对Surface区域之外或者剪切区域之外的像素设置颜色不会有任何效果。

在游戏和实时模拟中,一次取得和设置一个像素是很慢的。

这个函数会根据需要临时加锁和解锁Surface。

== Surface.set_clip ==
设置Surface的剪切区域
{{{
Surface.set_clip(rect): return None
Surface.set_clip(None): return None
}}}
每个Surface都有一个剪切区域。这个区域是个矩形,表示只有在这个矩形内的像素可以被修改。如果指定None作为矩形区域,则整个Surface都可以修改。

剪切区域总是在Surface本身的区域只内的。如果剪切区域比Surface的区域大,则会自动缩小到Surface区域之内。
       

== Surface.get_clip ==
获得Surface的当前剪切区域
{{{
Surface.get_clip(): return Rect
}}}
返回Surface的当前剪切区域。一个Surface总是返回一个有效的矩形,不会超过图像的边界范围。如果Surface设置了None作为剪切区域,则Surface会返回整个Surface的区域。

== Surface.get_size ==

获得Surface的大小
{{{
Surface.get_size(): return (width, height)
}}}
返回Surface的像素高度和宽度

== Surface.get_width ==

获得Surface的宽度
{{{
Surface.get_width(): return width
}}}
返回Surface的像素宽度

== Surface.get_height ==

获得Surface的高度
{{{
Surface.get_height(): return height
}}}
返回Surface的像素高度



= pygame.draw =

在Surface上画一些简单的图形。这些函数可以在任何格式的Surface上使用。在硬件Surface上使用会比普通的软件Surface上慢。

大部分的函数都包括一个width参数来表示画笔的大小(即形状的边缘的宽度)。如果width是0则整个图形会被颜色填充。

所有的函数都有Surface剪切区域,它的操作会被限制在这个区域里面。这些函数返回一个矩形区域表示被改动的像素的范围。

大部分表示颜色的参数是一个RGB三元组,也可以使用RGBA四元组。如果Surface包含alpha,四元组中alpha值会被直接写入到Surface里面,画图函数并不会进行透明的绘画。颜色参数也可以是一个整数,可以映射到Surface的像素格式。

这些函数在操作时必须临时锁定Surface。如果有很多一系列的绘图操作,可以使用Surface的锁定和解锁操作来加速。


== pygame.draw.rect ==

画一个矩形

pygame.draw.rect(Surface, color, Rect, width=0): return Rect

在Surface上画一个矩形。指定的Rect是矩形的区域。width参数是矩形框的粗细。如果width是0,整个矩形会被填充。

要记住的是,Surface.fill也可以画一个填充的矩形。实际上,Surface.fill在某些平台上可以用硬件加速。
      

== pygame.draw.polygon ==

画一个有任意条边的图形

pygame.draw.polygon(Surface, color, pointlist, width=0): return Rect

在Surface上画一个多边形。pointlist参数是多边形顶点的列表。width参数是多边形的边的粗细。如果width是0,多边形是被填充的。

对于aapolygon,使用带closed参数的aalines。


== pygame.draw.circle ==

围绕一个点画一个圆

pygame.draw.circle(Surface, color, pos, radius, width=0): return Rect

在Surface上画一个圆形。pos参数是圆的圆心,radius是半径大小。width参数是圆边的粗细,如果width是0圆会被填充。

== pygame.draw.ellipse ==

在矩形区域中画一个椭圆的形状

pygame.draw.ellipse(Surface, color, Rect, width=0): return Rect

在Surface上画一个椭圆。给定的矩形区域是椭圆填充的区域。width是边的粗细。如果width是0,椭圆会被填充。

== pygame.draw.arc ==

画椭圆的一部分

pygame.draw.arc(Surface, color, Rect, start_angle, stop_angle, width=1): return Rect

在Surface上画一个椭圆状的弧线。rect参数指定椭圆填充的矩形。两个角度参数指定起始和终止的角度(以弧度为单位),朝右为0度。width参数是弧线的粗细。

== pygame.draw.line ==

画一条直线段

pygame.draw.line(Surface, color, start_pos, end_pos, width=1): return Rect

在Surface上画一条直线段。线段终点没有箭头,宽的线段终点是方形的。

== pygame.draw.lines ==

画多条连续的线段

pygame.draw.lines(Surface, color, closed, pointlist, width=1): return Rect

在Surface上画一系列的直线。pointlist是一系列点的列表。如果closed参数是True,则在最后一点和第一点之间会画一条线段。

这个函数不会画终点箭头和中间连接头。线段有尖锐的拐角,粗的线段会有看上去不正确的拐角。

== pygame.draw.aaline ==

画抗锯齿的线段

pygame.draw.aaline(Surface, color, startpos, endpos, blend=1): return Rect

在Surface上画一条抗锯齿的直线段。如果blend是True,则阴影部分是和原始像素混合而不是直接覆盖的。这个函数接受浮点数作为点的坐标。

== pygame.draw.aalines ==

pygame.draw.aalines(Surface, color, closed, pointlist, blend=1): return Rect

画多条连续的线段,每个线段都是抗锯齿的。pointlist里面至少要两个点。closed参数如果是True,则在第一个点和最后一点之间会画一条直线。如果blend参数是True,则阴影部分是和原始像素混合而不是直接覆盖的。这个函数接受浮点数作为点的坐标。

= pygame.font =

font模块允许允许在新创建的Surface上画TrueType字体。这个模块是可选的,并依赖于SDL_ttf。你应该测试pygame.font是否可用,并在尝试使用前初始化它。

字体的大部分工作使用Font对象来实现。这个模块它自己仅有初始化函数和pygame.font.Font函数用来创建Font对象。

你可以使用pygame.font.SysFont从系统载入字体。有一些其它的函数用来帮助查找系统字体。

pygame自带一个默认的字体。这个字体总是可以用None作为字体名字被使用。

== pygame.font.init ==

初始化font模块

pygame.font.init(): return None

这个方法会在pygame.init时自动调用。它初始化font模块。在使用这个模块的其他函数之前必须先初始化。

多次调用这个函数也不会有副作用。

== pygame.font.quit ==

uninitialize font模块

pygame.font.quit(): return None

手动uninitialize SDL_ttf的字体系统。这个函数会被pygame.quit自动调用。

如果font模块没有被初始化,调用这个函数也不会有问题。

== pygame.font.get_init ==

返回True如果font模块被初始化了

pygame.font.get_init(): return bool

测试font模块是否被初始化了。

== pygame.font.get_default_font ==

得到默认字体的文件名

pygame.font.get_default_font(): return string

返回系统字体的文件名。这个不是文件的完整路径。这个文件通常可以在和font模块相同的目录中找到,但是它也可能在其它文档中。

== pygame.font.get_fonts ==

获得所有可用的字体

pygame.font.get_fonts(): return list of strings

返回一个系统所有可用字体的列表。字体的名字会用小写,所有的空格和其它字符都被去掉了。这在大部分系统都可以用,但是某些系统找不到字体会返回一个空的列表。

== pygame.font.match_font ==

在系统中查找一个特定的字体

pygame.font.match_font(name, bold=False, italic=False): return path

返回一个系统中字体文件的完整路径。如果bold或者italic参数是True,函数会尝试去查找正确的字体族。

字体的名字可以是逗号隔开的字体的列表。如果没有一个给定字体找到,函数返回None。

比如:{{{
print pygame.font.match_font('bitstreamverasans')
# output is: /usr/share/fonts/truetype/ttf-bitstream-vera/Vera.ttf
# (but only if you have Vera on your system)
}}}

== pygame.font.SysFont ==

从系统字体创建一个Font对象

pygame.font.SysFont(name, size, bold=False, italic=False): return Font

返回一个新建的从系统字体装载的Font对象。字体会对应请求的bold和italic标志。如果不能找到合适的系统字体,这个函数会载入缺省的pygame字体。字体名字可以是逗号隔开的字体名字的列表。

== pygame.font.Font ==

从文件创建一个Font对象

pygame.font.Font(filename, size): return Font

pygame.font.Font(object, size): return Font

从给定的文件名或者python文件对象载入新的字体。size是字体的高度。如果文件名是None,pygame的默认字体会被载入。如果参数指定的字体不能载入,会引发一个异常。一旦字体创建后,字体的大小不能被改变。

Font对象主要用来把文字画成新的Surface对象。画的过程可以模拟黑体和斜体的效果,但是最好使用真正的斜体和黑体字体。被画文字可以使普通字符串,也可以是unicode串。
       
=== Font.render ===

在新的Surface上画出文字。

Font.render(text, antialias, color, background=None): return Surface

这个函数创建一个新Surface对象,它上面包含了画出来的文字。pygame没有提供直接在存在的Surface上画文字的方法,而必须采用Font.render来创建一个新的Surface,然后把它blit到其他Surface上。

文字只能包含一行,换行符不会被画出来。antialias抗锯齿参数如果是真的,字符会有光滑的边缘。color参数指定了文字的颜色(比如(0,0,255)为蓝色)。可选的background参数用来指定文字背景的颜色。如果没有指定background,背景是透明的。

返回的Surface的大小是包含文字的必须的大小。(和Font.size()一样。)如果text是空字符串,会返回一个空白的Surface,只有一个像素宽和一个字符的高度。

返回的Surface的类型依赖于background和antialias的类型。因为性能的原因,最好要知道图像是哪种类型的。如果没有使用antialias,返回的图像是带两个调色板的8位的图像。如果background是透明的,会设置一个透明色colorkey。抗锯齿的图像会使用24位RGB图像。如果背景是透明的,会使用像素alpha。

优化:如果你知道最后文字的背景是单一的颜色,并且文字是抗锯齿的,那么你可以通过指定背景色来改进性能。这使得图像通过透明色colorkey而不是alpha(这个要慢得多)来指定透明信息。

如果你画'\n'字符,一个未知的字符会被画出来,通常是一个矩形。你应该自己去处理多行字符串。

画字体不是线程安全的:一个时刻只能有一个线程在画文字。

=== Font.size ===

确定画文字需要的大小

Font.size(text): return (width, height)

返回画文字需要的大小。这个函数可以帮助确定文字的位置,也可以用来确定文字换行和其他布局效果。

注意,大部分字体都会对特定的字符使用字据调整。比如说字符串“ae”的宽度不总是和"a"+"e"的宽度一致。

=== Font.set_underline ===

控制文字是否有下划线

Font.set_underline(bool): return None

当开启这个选项, 所有的文字都会有下划线。不管字体多大,下划线总是只有一个像素的宽度。这个选项可以和粗体、斜体混合使用。

=== Font.get_underline ===

检查画出来的文字是否有下划线。

Font.get_underline(): return bool

当字体设置有下划线,这个函数返回真。
       

=== Font.set_bold ===

开启文字的伪粗体

Font.set_bold(bool): return None

开启伪粗体。这是对字体进行伸展而得到的伪粗体,用在很多字体上不好看。如果可能的话,应该载入一个真正的粗体。当这个选项开启后,字符会有不同的宽度。这个选项可以和斜体和下划线混合使用。

=== Font.get_bold ===

检查字体设置是否用粗体。

Font.get_bold(): return bool

如果字体设置了粗体,返回真。

=== Font.set_italic ===

设置字体的伪斜体

Font.set_bold(bool): return None

开启字体的伪斜体。这是对字体进行倾斜而得到的伪斜体,用在很多字体上不好看。如果可能的话,应该载入真正的斜体。当开启了斜体后,字符的宽度可能会不同。这个选项可以和粗体、下划线混合使用。

=== Font.get_italic ===

检查字体设置是否为斜体

Font.get_italic(): return bool

如果字体设置了斜体,则返回真。


=== Font.get_linesize ===

获得行的高度。

Font.get_linesize(): return int

返回一行文字的像素高度。当画很多行字符的时候,这个高度是两行间的间隔的推荐值。

=== Font.get_height ===

获取字体的高度。

      Font.get_height(): return int

返回文字的实际像素高度。这是这种这种字体里的字符的平均高度。

=== Font.get_ascent ===

获得字体的ascent高度。

Font.get_ascent(): return int

返回字体的ascent像素高度。ascent是从字体的基线到字体顶部的像素高度。

=== Font.get_descent ===

获得字体的descent高度

Font.get_descent(): return int

返回字体的descent高度。descent是指从字体基线到字体底部的像素高度。

= The end =

TableOfContents

Surface

表示图像的pygame对象

pygame.Surface((width, height), flags=0, depth=0, masks=None): return Surface
pygame.Surface((width, height), flags=0, Surface): return Surface

pygame里的Surface是用来表示图像的对象。Surface有一定的大小和像素格式。如果是8bit像素格式的Surface,它还会用一个调色板映射到24比特颜色。

调用pygame.Surface可以创建表示图像的新对象。Surface会整个全是黑的。唯一需要指定的参数是大小。如果不指定其他参数,Surface的像素格式会与display Surface的像素格式尽量一致。

像素格式可以通过指定像素深度或者已有的Surface来控制。flags标志位参数是其他一些Surface选项的集合,你可以指定如下的标志

  • HWSURFACE, 在视频内存中创建图像
  • SRCALPHA, 像素格式中会包含一个alpha通道

这些参数都仅仅是一个请求,在实际中可能并不能实现。

高级用户可以组合一组颜色屏蔽位,masks是4个整数的集合,表示像素里的哪个位用来表示一种颜色。一般的Surface不需要masks参数。

Surface可以有一些额外的属性,比如alpha平面、透明色、源矩形剪切。这些功能主要影响一个Surface如何被blit到其它的Surface。如果可能的话,blit函数会尝试使用硬件加速,否则就会使用优化的软件blit方法。

pygame支持三种类型的透明:透明色(colorkey),Surface alpha和每像素alpha。Surface alpha可以和透明色(colorkey)混合使用,但是有像素alpha的图像不能够使用其它模式。透明色(colorkey)让一种颜色值透明。任何和这个颜色相同的像素都不会被画出来。Surface alpha值是单独一个值用来改变整个图像的透明度。Surface alpha值是255表示不透明,值是0表示全透明。

而每像素alpha是不一样的,它为每个像素保存了一个透明值。这种方法允许精确的控制透明效果,但是这种方法也是最慢的。每像素alpha不能和其它方法混用。

Surface支持对单个像素的访问。访问硬件surface的像素是比较慢的,推荐不要这样做。像素可以由get_at()和set_at()函数访问。用这些函数做一些简单的操作是很好的,但是做比较复杂的像素操作就比较慢了。如果你打算做很多像素级的工作,你最好使用pygame.surfarray模块,它可以把surface像多维数组一样使用(而且比较快)。

任何直接访问Surface的像素数据的函数都要求先锁定(lock())。这些函数可以自动调用lock()和unlock()完成加锁和解锁。但是如果一个函数被调用很多次,那么就会有很多多余的加锁和解锁操作。最好是在多次使用这个函数之前,手动锁定Surface,并在结束时手动解锁。所有的需要解锁的函数的文档里面都会这样说。记住,只在需要的时候才锁住Surface。

Surface的数据在内部是表示成一个数字,包含所有的颜色。使用Surface.map_rgb和Surface.unmap_rgb来在独立的红绿蓝值和Surface的内部表示值之间的转换。

一个Surface可以引用另一个Surface的一部分。这通过Surface.subsurface函数创建。改变任何一个Surface都会影响其它的Surface。

每个Surface包含一个剪切区域。默认情况下,剪切区域是整个Surface。如果改变了剪切区域,所有的画图操作都会限制在一个比较小的范围之内。

1. Surface.blit

把一个图像画到另一个上面

Surface.blit(source, dest, area=None, special_flags = 0): return Rect

把源Surface画到这个Surface上。画的位置可以由dest参数指定。dest可以是一对坐标值,表示源Surface的左上角在这个Surface上的坐标。dest也可以是一个矩形,矩形的左上角作为blit的位置,而矩形的大小不影响blit。

有一个可选的area矩形参数,可以用来指定只画源Surface的一部分。

一个可选的special_flags参数,可以是BLEND_ADD、BLEND_SUB、BLEND_MULT、BLEND_MIN、BLEND_MAX。将来也可能有其它特殊标记添加进来。

返回的矩形表示受影响的像素的区域,不包括目标Surface以外的像素,也不包括剪切区域以外的像素。

如果blit到一个8位的Surface上,像素的alpha值会被忽略。

special_flags是在pygame 1.8中新增的。

2. Surface.convert

改变图像的像素格式

Surface.convert(Surface): return Surface
Surface.convert(depth, flags=0): return Surface
Surface.convert(masks, flags=0): return Surface
Surface.convert(): return Surface

创建一个像素格式不一样的新的Surface。新的像素格式可以由现存其它Surface确定,也可以由depth,flags或者masks决定。这些参数和pygame.Surface的参数类似。

如果没有参数,新的Surface会和display Surface的像素格式一样。这是画图最快的格式。转换所有需要多次blit的Surface是一个好主意。

转换出来的Surface不会有像素alpha。如果原来的Surface里面有,他们会被去掉。参看Surface.convert_alpha来保留或者创建每像素alpha。

3. Surface.copy

创建一个Surface的拷贝

Surface.copy(): return Surface

创建一个Surface的复制品。新创建的Surface和原来的Surface有相同的像素格式、调色板和透明设置。

4. Surface.fill

用一个颜色填充Surface

Surface.fill(color, rect=None): return Rect

用一种颜色填充Surface。如果没有给定rect参数,整个Surface会被填充。rect参数会限制备填充的区域。填充区域同样受到Surface的剪切区域的影响。

颜色参数可以是RGB序列或者是颜色索引值。

这个函数会返回受影响的Surface区域。

5. Surface.set_colorkey

设置透明色colorkey

Surface.set_colorkey(Color, flags=0): return None
Surface.set_colorkey(None): return None

设置Surface的透明色。当把这个Surface blit到令一个Surface时候,和这个透明色颜色相同的像素会变成透明。color参数可以是RGB颜色或者是一个映射的整数。如果传送的是None,则Surface会没有透明色。

如果是有每像素透明的Surface,透明色会被忽略。透明色可以和Surface alpha混合使用。

可选的flags参数可以是pygame.RLEACCEL,用来在没有加速的时候提供更好的性能。设置了RLEACCEL的Surface作为源Surface blit更快,但是修改Surface的内容会更慢。

6. Surface.get_at

获得特定像素点的颜色值

Surface.get_at((x, y)): return Color

返回指定像素的RGBA颜色值。如果Surface没有每像素alpha,alpha值总是255(不透明)。如果像素位置在Surface的区域以外,会引发一个IndexError异常。

在游戏和实时模拟中,一次取得和设置一个像素是很慢的。

这个函数会根据需要临时加锁和解锁Surface。

7. Surface.set_at

设置特定像素点的颜色值

Surface.set_at((x, y), Color): return None

为一个像素设置RGBA或者映射的整数颜色值。如果Surface没有每像素alpha,alpha值会被忽略。对Surface区域之外或者剪切区域之外的像素设置颜色不会有任何效果。

在游戏和实时模拟中,一次取得和设置一个像素是很慢的。

这个函数会根据需要临时加锁和解锁Surface。

8. Surface.set_clip

设置Surface的剪切区域

Surface.set_clip(rect): return None
Surface.set_clip(None): return None

每个Surface都有一个剪切区域。这个区域是个矩形,表示只有在这个矩形内的像素可以被修改。如果指定None作为矩形区域,则整个Surface都可以修改。

剪切区域总是在Surface本身的区域只内的。如果剪切区域比Surface的区域大,则会自动缩小到Surface区域之内。

9. Surface.get_clip

获得Surface的当前剪切区域

Surface.get_clip(): return Rect

返回Surface的当前剪切区域。一个Surface总是返回一个有效的矩形,不会超过图像的边界范围。如果Surface设置了None作为剪切区域,则Surface会返回整个Surface的区域。

10. Surface.get_size

获得Surface的大小

Surface.get_size(): return (width, height)

返回Surface的像素高度和宽度

11. Surface.get_width

获得Surface的宽度

Surface.get_width(): return width

返回Surface的像素宽度

12. Surface.get_height

获得Surface的高度

Surface.get_height(): return height

返回Surface的像素高度

pygame.draw

在Surface上画一些简单的图形。这些函数可以在任何格式的Surface上使用。在硬件Surface上使用会比普通的软件Surface上慢。

大部分的函数都包括一个width参数来表示画笔的大小(即形状的边缘的宽度)。如果width是0则整个图形会被颜色填充。

所有的函数都有Surface剪切区域,它的操作会被限制在这个区域里面。这些函数返回一个矩形区域表示被改动的像素的范围。

大部分表示颜色的参数是一个RGB三元组,也可以使用RGBA四元组。如果Surface包含alpha,四元组中alpha值会被直接写入到Surface里面,画图函数并不会进行透明的绘画。颜色参数也可以是一个整数,可以映射到Surface的像素格式。

这些函数在操作时必须临时锁定Surface。如果有很多一系列的绘图操作,可以使用Surface的锁定和解锁操作来加速。

1. pygame.draw.rect

画一个矩形

pygame.draw.rect(Surface, color, Rect, width=0): return Rect

在Surface上画一个矩形。指定的Rect是矩形的区域。width参数是矩形框的粗细。如果width是0,整个矩形会被填充。

要记住的是,Surface.fill也可以画一个填充的矩形。实际上,Surface.fill在某些平台上可以用硬件加速。

2. pygame.draw.polygon

画一个有任意条边的图形

pygame.draw.polygon(Surface, color, pointlist, width=0): return Rect

在Surface上画一个多边形。pointlist参数是多边形顶点的列表。width参数是多边形的边的粗细。如果width是0,多边形是被填充的。

对于aapolygon,使用带closed参数的aalines。

3. pygame.draw.circle

围绕一个点画一个圆

pygame.draw.circle(Surface, color, pos, radius, width=0): return Rect

在Surface上画一个圆形。pos参数是圆的圆心,radius是半径大小。width参数是圆边的粗细,如果width是0圆会被填充。

4. pygame.draw.ellipse

在矩形区域中画一个椭圆的形状

pygame.draw.ellipse(Surface, color, Rect, width=0): return Rect

在Surface上画一个椭圆。给定的矩形区域是椭圆填充的区域。width是边的粗细。如果width是0,椭圆会被填充。

5. pygame.draw.arc

画椭圆的一部分

pygame.draw.arc(Surface, color, Rect, start_angle, stop_angle, width=1): return Rect

在Surface上画一个椭圆状的弧线。rect参数指定椭圆填充的矩形。两个角度参数指定起始和终止的角度(以弧度为单位),朝右为0度。width参数是弧线的粗细。

6. pygame.draw.line

画一条直线段

pygame.draw.line(Surface, color, start_pos, end_pos, width=1): return Rect

在Surface上画一条直线段。线段终点没有箭头,宽的线段终点是方形的。

7. pygame.draw.lines

画多条连续的线段

pygame.draw.lines(Surface, color, closed, pointlist, width=1): return Rect

在Surface上画一系列的直线。pointlist是一系列点的列表。如果closed参数是True,则在最后一点和第一点之间会画一条线段。

这个函数不会画终点箭头和中间连接头。线段有尖锐的拐角,粗的线段会有看上去不正确的拐角。

8. pygame.draw.aaline

画抗锯齿的线段

pygame.draw.aaline(Surface, color, startpos, endpos, blend=1): return Rect

在Surface上画一条抗锯齿的直线段。如果blend是True,则阴影部分是和原始像素混合而不是直接覆盖的。这个函数接受浮点数作为点的坐标。

9. pygame.draw.aalines

pygame.draw.aalines(Surface, color, closed, pointlist, blend=1): return Rect

画多条连续的线段,每个线段都是抗锯齿的。pointlist里面至少要两个点。closed参数如果是True,则在第一个点和最后一点之间会画一条直线。如果blend参数是True,则阴影部分是和原始像素混合而不是直接覆盖的。这个函数接受浮点数作为点的坐标。

pygame.font

font模块允许允许在新创建的Surface上画TrueType字体。这个模块是可选的,并依赖于SDL_ttf。你应该测试pygame.font是否可用,并在尝试使用前初始化它。

字体的大部分工作使用Font对象来实现。这个模块它自己仅有初始化函数和pygame.font.Font函数用来创建Font对象。

你可以使用pygame.font.SysFont从系统载入字体。有一些其它的函数用来帮助查找系统字体。

pygame自带一个默认的字体。这个字体总是可以用None作为字体名字被使用。

1. pygame.font.init

初始化font模块

pygame.font.init(): return None

这个方法会在pygame.init时自动调用。它初始化font模块。在使用这个模块的其他函数之前必须先初始化。

多次调用这个函数也不会有副作用。

2. pygame.font.quit

uninitialize font模块

pygame.font.quit(): return None

手动uninitialize SDL_ttf的字体系统。这个函数会被pygame.quit自动调用。

如果font模块没有被初始化,调用这个函数也不会有问题。

3. pygame.font.get_init

返回True如果font模块被初始化了

pygame.font.get_init(): return bool

测试font模块是否被初始化了。

4. pygame.font.get_default_font

得到默认字体的文件名

pygame.font.get_default_font(): return string

返回系统字体的文件名。这个不是文件的完整路径。这个文件通常可以在和font模块相同的目录中找到,但是它也可能在其它文档中。

5. pygame.font.get_fonts

获得所有可用的字体

pygame.font.get_fonts(): return list of strings

返回一个系统所有可用字体的列表。字体的名字会用小写,所有的空格和其它字符都被去掉了。这在大部分系统都可以用,但是某些系统找不到字体会返回一个空的列表。

6. pygame.font.match_font

在系统中查找一个特定的字体

pygame.font.match_font(name, bold=False, italic=False): return path

返回一个系统中字体文件的完整路径。如果bold或者italic参数是True,函数会尝试去查找正确的字体族。

字体的名字可以是逗号隔开的字体的列表。如果没有一个给定字体找到,函数返回None。

比如:

print pygame.font.match_font('bitstreamverasans')
# output is: /usr/share/fonts/truetype/ttf-bitstream-vera/Vera.ttf
# (but only if you have Vera on your system)

7. pygame.font.SysFont

从系统字体创建一个Font对象

pygame.font.SysFont(name, size, bold=False, italic=False): return Font

返回一个新建的从系统字体装载的Font对象。字体会对应请求的bold和italic标志。如果不能找到合适的系统字体,这个函数会载入缺省的pygame字体。字体名字可以是逗号隔开的字体名字的列表。

8. pygame.font.Font

从文件创建一个Font对象

pygame.font.Font(filename, size): return Font

pygame.font.Font(object, size): return Font

从给定的文件名或者python文件对象载入新的字体。size是字体的高度。如果文件名是None,pygame的默认字体会被载入。如果参数指定的字体不能载入,会引发一个异常。一旦字体创建后,字体的大小不能被改变。

Font对象主要用来把文字画成新的Surface对象。画的过程可以模拟黑体和斜体的效果,但是最好使用真正的斜体和黑体字体。被画文字可以使普通字符串,也可以是unicode串。

8.1. Font.render

在新的Surface上画出文字。

Font.render(text, antialias, color, background=None): return Surface

这个函数创建一个新Surface对象,它上面包含了画出来的文字。pygame没有提供直接在存在的Surface上画文字的方法,而必须采用Font.render来创建一个新的Surface,然后把它blit到其他Surface上。

文字只能包含一行,换行符不会被画出来。antialias抗锯齿参数如果是真的,字符会有光滑的边缘。color参数指定了文字的颜色(比如(0,0,255)为蓝色)。可选的background参数用来指定文字背景的颜色。如果没有指定background,背景是透明的。

返回的Surface的大小是包含文字的必须的大小。(和Font.size()一样。)如果text是空字符串,会返回一个空白的Surface,只有一个像素宽和一个字符的高度。

返回的Surface的类型依赖于background和antialias的类型。因为性能的原因,最好要知道图像是哪种类型的。如果没有使用antialias,返回的图像是带两个调色板的8位的图像。如果background是透明的,会设置一个透明色colorkey。抗锯齿的图像会使用24位RGB图像。如果背景是透明的,会使用像素alpha。

优化:如果你知道最后文字的背景是单一的颜色,并且文字是抗锯齿的,那么你可以通过指定背景色来改进性能。这使得图像通过透明色colorkey而不是alpha(这个要慢得多)来指定透明信息。

如果你画'\n'字符,一个未知的字符会被画出来,通常是一个矩形。你应该自己去处理多行字符串。

画字体不是线程安全的:一个时刻只能有一个线程在画文字。

8.2. Font.size

确定画文字需要的大小

Font.size(text): return (width, height)

返回画文字需要的大小。这个函数可以帮助确定文字的位置,也可以用来确定文字换行和其他布局效果。

注意,大部分字体都会对特定的字符使用字据调整。比如说字符串“ae”的宽度不总是和"a"+"e"的宽度一致。

8.3. Font.set_underline

控制文字是否有下划线

Font.set_underline(bool): return None

当开启这个选项, 所有的文字都会有下划线。不管字体多大,下划线总是只有一个像素的宽度。这个选项可以和粗体、斜体混合使用。

8.4. Font.get_underline

检查画出来的文字是否有下划线。

Font.get_underline(): return bool

当字体设置有下划线,这个函数返回真。

8.5. Font.set_bold

开启文字的伪粗体

Font.set_bold(bool): return None

开启伪粗体。这是对字体进行伸展而得到的伪粗体,用在很多字体上不好看。如果可能的话,应该载入一个真正的粗体。当这个选项开启后,字符会有不同的宽度。这个选项可以和斜体和下划线混合使用。

8.6. Font.get_bold

检查字体设置是否用粗体。

Font.get_bold(): return bool

如果字体设置了粗体,返回真。

8.7. Font.set_italic

设置字体的伪斜体

Font.set_bold(bool): return None

开启字体的伪斜体。这是对字体进行倾斜而得到的伪斜体,用在很多字体上不好看。如果可能的话,应该载入真正的斜体。当开启了斜体后,字符的宽度可能会不同。这个选项可以和粗体、下划线混合使用。

8.8. Font.get_italic

检查字体设置是否为斜体

Font.get_italic(): return bool

如果字体设置了斜体,则返回真。

8.9. Font.get_linesize

获得行的高度。

Font.get_linesize(): return int

返回一行文字的像素高度。当画很多行字符的时候,这个高度是两行间的间隔的推荐值。

8.10. Font.get_height

获取字体的高度。

  • Font.get_height(): return int

返回文字的实际像素高度。这是这种这种字体里的字符的平均高度。

8.11. Font.get_ascent

获得字体的ascent高度。

Font.get_ascent(): return int

返回字体的ascent像素高度。ascent是从字体的基线到字体顶部的像素高度。

8.12. Font.get_descent

获得字体的descent高度

Font.get_descent(): return int

返回字体的descent高度。descent是指从字体基线到字体底部的像素高度。

The end

Pygame图形接口基础 (2008-02-23 15:34:18由localhost编辑)

ch3n2k.com | Copyright (c) 2004-2020 czk.