draw 是diplay中绘制简单形状的模块。该模块的绘图方法可以绘制到任何的Surface上,但仅可以在Surface的剪切区域生效,并且在绘制时还要暂时锁定Surface。
需要注意的是这些方法返回的都是Rect,并不是Surface,不要搞混了。
这些方法的语法都差不多。形如(Surface,color,绘图参数,width)。第一个参数Surface是指要绘图到哪个Surface上,第二个参数color是用什么颜色作图,最后一个参数width是指线条的宽度。
闭合图形(长方形、多边形,圆和椭圆)的width默认为0。指用给定的颜色填充整个图形。而非闭合图形(线段,多条连续的线段,弧形),是不用填充的,所以width默认值为1。即默认绘制的线条宽度为1个像素。
特别注意,绘制多条连续线段时,即使设置closed为True,形成一个闭合的图形,如果它的width=0,也不会填充图形。
当绘制闭合图形时width设为小于0,或绘制线段及弧形的width设为小于等于0时,虽然不会绘制任何图形,但也并不会报错。一样会返回一个Rect。是一个以第一个点为左上角顶点,宽和高为0的Rect。当然这样做没有任何意义。
抗锯齿线段没有width参数。它最后一个参数是blend。指是否通过绘制混合背景的阴影来实现抗锯齿功能。各种资料指出当blend不等于0时,打开抗锯齿功能。当blend=0时关闭抗锯齿功能。但经过多方实测,当blend=0时才会打开抗锯齿功能。blend不等于0时会关闭抗锯齿。下图中绿色线是设置blend=0,红色线是blend=1 。

1、pygame.draw.rect(Surface,color,Rect,width=0) -> Rect
在Surface上绘制一个矩形,Rect指明了矩形的位置及大小。width指明绘制线条的宽度。当width=0时,填充整个图形。
2、pygame.draw.polygon(Surface,color,pos_list,width=0) -> Rect
在Surface上绘制一个多边形,参数pos_list是包含多个点的列表,做为多边形的各个顶点。width指明绘制线条的宽度。当width=0时,填充整个图形。
注意,绘制出的多边形并不一定是我们期待的简单多边形,它会按pos_list列表中给出的点的顺序连接各个点,最后形成闭合图形。也就是说,它形成的边可能会相交。
3、pygame.draw.circle(Surface,color,pos,radius,width=0) -> Rect
在Surface上以pos为圆心,radius为半径绘制一个圆形。width指明绘制线条的宽度。当width=0时,填充整个图形。
4、pygame.draw.ellipse(Surface,color,Rect,width=0) -> Rect
在Surface上绘制一个椭圆形,Rect指明了椭圆形的外边框。width指明绘制线条的宽度。当width=0时,填充整个图形。
5、pygame.draw.arc(Surface,color,Rect,start_angle,end_angle,width=1) -> Rect
在Surface上绘制一段弧形。此弧形是在以Rect为外边框的椭圆上,以开始角度到结束角度之间截取的线段。注意这里的角度是以“弧度”为计量单位的。
6、pygame.draw.line(Surface,color,start_pos,end_pos,width=1) -> Rect
在Surface上绘制两点之间的线段。width指明绘制线条的宽度。
7、pygame.draw.lines(Surface,color,closed,pos_list,width=1) -> Rect
在Surface上绘制多条相连的线段。参数pos_list是包含多个点的列表。当closed设置为True时,把第一个点与最后一个点连接在一起
形成一个闭合图形。
8、pygame.draw.aaline(Surface,color,start_pos,end_pos,blend=1) -> Rect
在Surface上绘制两点之间的线段。参数blend控制是否启动抗锯齿功能。
9、pygame.draw.aalines(Surface,color,closed,pos_list,blend=1) -> Rect
在Surface上绘制多条相连的线段。参数pos_list是包含多个点的列表。参数blend控制是否启动抗锯齿功能。
下面是一段完整的程序。
import pygame,sys,math
from pygame.locals import *
#创建显示屏幕screen
size = width,height = 800,600
screen = pygame.display.set_mode(size)
clock = pygame.time.Clock()
#包含6个点的列表,pos_list2到pos_list8 是pos_list1中所有点的坐标加上一个数值,即平移多少个像素点得到
pos_list1 =[(269, 33), (235, 38), (177, 10), (207, 58), (230, 17), (232, 71)]
pos_list2 = [(pos[0],pos[1]+60) for pos in pos_list1]
pos_list3

最低0.47元/天 解锁文章
3509

被折叠的 条评论
为什么被折叠?



