淘先锋技术网

首页 1 2 3 4 5 6 7

图形绘制——pygame.draw模块

1.直线的绘制

#绘制直线
pygame.draw.line(Surface,color,start_pos,end_pos,width=1)
#抗锯齿版本直线
pygame.draw.aaline(Surface,color,start_pos,end_pos,blend=1)

各个参数解释:

  • Surface可以理解为该直线完毕显示在哪个surface上
  • color直线的颜色,为RGB三元组或RGBA四元组
  • start_pos,end_pos分别为直线的起点坐标和终点坐标均为二元组
  • width为直线的宽度,默认为1
  • blend为是否打开直线边缘的融合效果,一般不对其设置使用其默认值

2.折线的绘制

#绘制折线
pygame.draw.lines(Surface,color,closed,pointlist,width=1)
#抗锯齿折线
pygame.draw.aalines(Surface,color,closed,pointlist,blend=1)

各个参数解释:

  • Surface即要把折线绘制到哪个surface对象上
  • color为折线的颜色,为三元组或四元组
  • closed表示折线是否封闭,如果为True则pointlist中的第一个点会和最后一个点连接起来
  • pointlist表示所有构成点的坐标的列表
    注意:在给定该参数列表时应用()包裹即:

((a,b),(b,c),(c,d))

  • width表示折线宽度,数值越大,折线越粗
  • blend表示是否打开直线边缘的融合效果,一般选用默认值

3.矩形绘制

#矩形绘制
pygame.draw.rect(Surface,color,Rect,width=0)

各参数解释:

  • Surface即在哪个Surface绘制矩形
  • color为矩形颜色的RGB值或RGBA值
  • Rect表示绘制的矩形区域,可以是四元组,也可以为Rect对象

注:四元组(a,b,c,d)其中a,b,c,d分别代表左上角横坐标,左上角纵坐标,矩形宽,矩形高

  • width为0时,整个区域被color填充,不为0则color只填充边框

4.多边形绘制

#多边形绘制
pygame.draw.polygon(Surface,color,pointlist,width=0)

各参数解释:

  • Surface为在哪个surface上绘制多边形
  • color为多边形颜色
  • pointlist为各个顶点的坐标,记得书写时用()包裹
  • width为多边形边的宽度,与矩形相同width为0时,填充多边形内整个区域

5.圆形绘制

#圆形绘制
pygame.draw.circle(Surface,color,pos,radius,width=0)

各参数解释:

  • Surface即在哪个Surface上绘制圆形
  • color为圆形颜色
  • pos为圆心坐标为一个二元组
  • radius为圆的半径
  • width为圆形弧线的宽度为0填充整个圆形区域

6.椭圆绘制

#椭圆绘制
pygame.draw.eclipse(Surface,color,Rect,width=0)

各参数解释:

  • Surface即要在哪个Surface上绘制椭圆
  • color为填充颜色
  • Rect为椭圆的外接矩形,具体参照矩形绘制
  • width为椭圆弧线的宽度,为0填充整个椭圆

7.弧线绘制

#弧线绘制,简单介绍一下思路弧线的绘制实质上是截取椭圆的部分线段
pygame.draw.arc(Surface,color,Rect,start_angle,stop_angle,width=1)

各参数解释:

  • Surface为要在哪个Surface上绘制椭圆
  • color为填充颜色
  • Rect为弧线所属椭圆的外接矩形
  • start_angele代表椭圆的初始弧度,stop_angle代表椭圆的终止弧度

注:start_angle与stop_angle的单位都为弧度,典型取值范围为[0,2π]

  • width为弧线的宽度默认为1

8.具体实例

# 引入相关模块
import pygame,sys
# 函数声明与定义
def main():
    # 初始化
    pygame.init()
    # 设置窗口大小
    a=pygame.display.set_mode((800,700))
    # 填充背景色为白色
    a.fill((255,255,255))
    # 主循环
    while True:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                # 用户点击叉号结束
                pygame.quit()
                sys.exit()
        # 绘制直线
        pygame.draw.line(a,(0,255,0),(0,10),(200,10),1)
        # 绘制抗锯齿版本直线
        pygame.draw.aaline(a,(0,255,0),(0,20),(200,20))
        # 绘制折线
        pygame.draw.lines(a,(0,255,0),True,((0,40),(30,30),(40,40)),1)
        # 抗锯齿版本
        pygame.draw.aalines(a,(0,255,0),True,((40,40),(80,30),(80,40)),1)
        # 绘制矩形
        pygame.draw.rect(a,(0,255,0),(0,60,100,200),0)
        # 绘制多边形
        pygame.draw.polygon(a,(0,255,0),((200,0),(180,90),(80,90),(200,190)),0)
        # 圆形绘制
        pygame.draw.circle(a,(0,0,0),(200,200),9)
        # 椭圆绘制
        pygame.draw.ellipse(a,(255,0,0),(0,60,100,200))
        # 弧线绘制
        pygame.draw.arc(a,(0,0,0),(400,500,200,400),0,3/2)
        # 刷新窗口页面
        pygame.display.flip()


if __name__=='__main__':
    # 调用函数
	main()

运行效果如下:
在这里插入图片描述
注:因为坐标点计算太过痛苦,所以导致了部分绘制聚集部分绘制分散望见谅