2.8 图形绘制
大家应该还记得,向屏幕绘制内容时大多使用pygame.Surface模块的fill()函数和blit()函数,但是绘制线条和图形却并非如此,其相关函数是在pygame.draw模块中定义的。
pygame.draw模块提供了一些用来绘制基本图形的函数,如直线、折线、矩形、多边形、圆形、椭圆形、弧线等。
下面依次介绍这些函数的用法。
1. 绘制直线
该函数将在Surface上绘制一条直线段,颜色为color,起点坐标为start_pos,终点坐标为end_pos,粗细程度为width。其中,参数color的取值为RGB三元组或RGBA四元组,start_pos和end_pos的取值为由点的x坐标与y坐标组成的二元组,参数width的默认值为1,取值越大,直线段越粗。
注意:在所有参数中,只有width有默认值,其他参数在函数调用时都必须提供。
除了line()函数以外,以下函数也可以绘制直线段。
该函数的功能与line()函数类似,只不过它绘制的是抗锯齿后的直线段。函数名称aaline开头的两个字母a代表anti-aliased,其参数与line()函数类似,但是并没有参数width,无法设置直线段的粗细;最后一个参数blend代表是否打开直线段边缘的融合效果,一般情况下都是使用其默认值,无须设置其为False。
2. 绘制折线
该函数可以在Surface上绘制一条折线,即多条连续的直线段,其参数color代表折线的颜色,为RGB三元组或RGBA四元组;参数closed代表折线是否封闭,如果为True,则pointlist中的第一个点和最后一个点会被一条直线段连接;参数pointlist是构成折线的点的坐标的列表,其中所有相邻的两个点都会被直线段连接;最后一个参数width代表线条的粗细程度。
与line()函数类似,lines()函数也有其相应的抗锯齿版本,如下。
aalines()函数绘制的是抗锯齿后的折线,其参数与lines()函数类似,不同的只是最后一个参数,这一点与aaline()函数类似。
pygame.draw模块中并没有专门绘制三角形的函数,不过稍做思考即可发现,使用lines()或者aalines()函数可以很容易地绘制出三角形:只要在参数pointlist中给出三个不在同一条直线的点的坐标,然后把closed参数设置为True即可。
3. 绘制矩形
该函数用来在Surface上绘制矩形,参数color用来指定矩形颜色的RGB值或RGBA值;Rect代表将要绘制的矩形区域,它可以是Rect对象,也可以是一个四元组(a,b,c,d),其中,a、b、c、d分别代表矩形左上角的横坐标、左上角的纵坐标、矩形的宽度和矩形的高度。对于前面已经介绍过的blit()函数等众多需要使用矩形区域作为参数的地方,我们都可以利用这种方法传参。最后一个参数width代表矩形外边框的粗细程度,如果为0,则整个矩形区域都会被颜色color填充,在这种情况下,该函数的功能与pygame.Surface.fill()函数类似。
4. 绘制多边形
该函数用来在Surface上绘制多边形,color代表多边形的颜色,pointlist代表多边形各个顶点的坐标列表,width用来指定多边形外边框的粗细程度。如果width的值为0,则多边形内部的整个区域将会被颜色color填充。
可想而知,polygon()函数也可以绘制三角形和矩形。
5. 绘制圆形
该函数用来在Surface上绘制圆形,color代表颜色的RGB值或RGBA值,pos代表圆心的坐标,radius代表圆的半径,width代表圆形外边框的粗细程度。同样,如果width的值为0,则整个圆形区域都会被颜色color填充。
6. 绘制椭圆形
该函数用来在Surface上绘制椭圆形,color代表颜色,Rect代表椭圆的外接矩形,width代表椭圆形外边框的粗细程度。如果width的值为0,则整个椭圆形区域都会被颜色color填充。
7. 绘制弧线
该函数用来绘制弧线。
注意:这里的弧线是被当作椭圆的一部分进行绘制的,因此在其参数中,也需要Rect参数指定椭圆的外接矩形。除此之外,还需要输入角度以指定绘制的弧线是椭圆的哪一部分,其参数color代表弧线的颜色;Rect代表椭圆的外接矩形;start_angle代表弧线的初始弧度,stop_angle代表弧线的终止弧度。
注意:它们的单位都是弧度(radians),而不是角度(°),其典型取值在[0,2π]范围内;参数width代表弧线线条的粗细程度。
8. 具体示例
最后给出一个示例,它使用到了上面提到的一系列函数在屏幕上绘制基本图形,代码如下。
该示例的执行效果如图2-7所示。
图2-7 图形绘制示例程序