Pygame Draw绘图函数详解

Pygame 中提供了一个draw模块用来绘制一些简单的图形状,比如矩形、多边形、圆形、直线、弧线等。

pygame.draw模块的常用方法如下表所示:

方法 说明

pygame.draw.rect() 绘制矩形

pygame.draw.polygon() 绘制多边形

pygame.draw.circle() 根据圆心和半径绘制圆形

pygame.draw.ellipse() 绘制一个椭圆形

pygame.draw.arc() 绘制弧线(挥着椭圆的一部分)

pygame.draw.line() 绘制线段(直线)

pygame.draw.lines() 绘制多条连续的线段

pygame.draw.aaline() 绘制一条平滑的线段(抗锯齿)

pygame.draw.aalines() 绘制多条连续的线段

表格中的函数使用方法大同小异,它们都可以在 Surface 对象上绘制一些简单的形状,返回值是一个 Rect 对象,表示实际绘制图形的矩形区域。上述绘图函数都提供了一个 color 参数,我们可以通过以下三种方式来传递 color 参数值:

使用 pygame.color 对象

RGB 三元组

RGBA 四元组

下面通对上述一些方法的参数进行详细说明:

1) 绘制矩形

绘制矩形的语法格式如下:

pygame.draw.rect(surface, color, rect, width)

参数说明如下:

surface:指主游戏窗口,无特殊情况,一般都会绘制在主屏幕上; color:该参数用于该图形着色; rect:绘制图形的位置和尺寸大小;
width:可选参数,指定边框的宽度,默认为 0,表示填充该矩形区域。

注意,当 width > 0 时,表示线框的宽度;而 width < 0 时,此时不会绘制任何图形。

2) 绘制多边形

pygame.draw.polygon(surface, color, points, width)

其中 points 一个列表参数,它表示组成多边形顶点的 3 或者多个 (x,y) 坐标,通过元组或者列表来表示这些多边形顶点。其余参数与上述函数相同。

3) 绘制圆形

pygame.circle(surface, color, pos, radius, width=0)

上述参数的含义如下:

pos:该参数用来指定的圆心位置;
radius:用来指定圆的半径;

4) 绘制椭圆形

pygame.draw.ellipse(surface, color, Rect, width=0)

绘制椭圆形的过程,其实就是在矩形区域内部(Rect)绘制一个内接椭圆形,其余参数与上述参数意思相同。

5) 绘制圆弧曲线

当需要绘制圆弧的曲线时,使用以下函数,语法格式如下:

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

与 ellipse 函数相比,该函数多了两个参数:
start_angle是该段圆弧的起始角度;
stop_angle是终止角度;

这两个都是用弧度制来表示的,而原点就是矩形 Rect 的中心位置。

6) 绘制直线

Draw 模块提供了两类绘制直线的方法,即是否消除直线的锯齿,并且根据实际情况,我们还可以选择绘制一条或者多条直线。

pygame.draw.line(surface, color, start_pos, end_pos, width=1)

参数说明:

start_pos 和 end_pos 表示线段的起始位置,此处使用 [x,y] 来表示起始位置;
width =1 表示直线的宽度,默认为1。

如果是绘制一条消除锯齿的平滑线,此时则使用 blend = 1 参数,如下所示:

pygame.aaline(surface, color, startpos, endpos, blend=1)

blend 参数表示通过绘制混合背景的阴影来实现抗锯齿功能。

7) 绘制多条直接

当需要绘制多条直线的时候,我们可以使用以下方法:

pygame.lines(surface, color, closed, pointlist, width=1)

其中 pointlist 与 closed 含义如下:

pointlist:参数值为列表,包含了一些列点坐标的列表
closed:布尔值参数,如果设置为
True,表示直线的第一个端点和直线的最后一个端点要首尾相连;

如果绘制抗锯齿直线,使用以下方法:

pygame.draw.aalines(surface, color, closed, pointlist, blend=1)

除了指定了 blend = 1 之外,其余参数含义与上述函数相同。

下面通过一组简单的示例对上述绘图方法进行演示:

import pygame
from math import pi
#初始化
pygame.init()
# 设置主屏幕大小
size = (500, 450)
screen = pygame.display.set_mode(size)
#设置标题
pygame.display.set_caption("C语言")
# 设置一个控制主循环的变量
done = False
#创建时钟对象
clock = pygame.time.Clock()
while not done:# 设置游戏的fpsclock.tick(10)for event in pygame.event.get():if event.type == pygame.QUIT:done = True  # 若检测到关闭窗口,则将done置为True# 绘制一条宽度为 3 的红色对角线pygame.draw.line(screen, (0, 255, 0), [0, 0], (500, 450), 3)# 绘制多条蓝色的直线(连续直线,非抗锯齿),False 表示首尾不相连pygame.draw.lines(screen, (0, 0, 255), False, [[0, 80], [50, 90], [200, 80], [220, 30]], 1)# 绘制一个灰色的矩形区域,以灰色填充区域pygame.draw.rect(screen, (155, 155, 155), (75, 10, 50, 20), 0)# 绘制一个线框宽度为2的矩形区域pygame.draw.rect(screen, (0, 0, 0), [150, 10, 50, 20],2)# 绘制一个椭圆形,其线宽为2pygame.draw.ellipse(screen, (255, 0, 0), (225, 10, 50, 20), 2)# 绘制一个实心的红色椭圆形pygame.draw.ellipse(screen, (255, 0, 0), (300, 10, 50, 20))# 绘制一个绿色边框(宽度为2)三角形pygame.draw.polygon(screen, (100, 200, 45), [[100, 100], [0, 200], [200, 200]], 2)# 绘制一个蓝色实心的圆形,其中[60,250]表示圆心的位置,40为半径,width默认为0pygame.draw.circle(screen, (0, 0, 255), [60, 250], 40)# 绘制一个圆弧,其中0表示弧线的开始位置,pi/2表示弧线的结束位置,2表示线宽pygame.draw.arc(screen, (255, 10, 0), (210, 75, 150, 125), 0, pi / 2, 2)# 刷新显示屏幕pygame.display.flip()
# 点击关闭,退出pygame程序
pygame.quit()

程序的运行结果如下所示:

图1:Pygame绘图函数用法

Pygame Draw绘图函数详解相关推荐

  1. pygame中draw模块方法详解

    目录 pygame.draw.rect() pygame.draw.polygon() pygame.draw.circle() pygame.draw.ellipse() pygame.draw.a ...

  2. Matlab中画图以及plot函数及legend函数详解

    Matlab中plot函数及legend函数详解 Matlab中plot函数全功能解析Matlab中plot函数及legend函数详解 功能 二维曲线绘图 语法 plot(Y) plot(X1,Y1, ...

  3. Matlab中plot函数及legend函数详解

    Matlab中plot函数及legend函数详解 Matlab中plot函数及legend函数详解 Matlab中plot函数全功能解析 功能 二维曲线绘图 语法 plot(Y) plot(X1,Y1 ...

  4. python中plt定义,对Python中plt的画图函数详解

    1.plt.legend plt.legend(loc=0)#显示图例的位置,自适应方式 说明: 'best' : 0, (only implemented for axes legends)(自适应 ...

  5. R统计绘图-PCA详解1(princomp/principal/prcomp/rda等)

    此文为<精通机器学习:基于R>的学习笔记,书中第九章详细介绍了无监督学习-主成分分析(PCA)的分析过程和结果解读. PCA可以对相关变量进行归类,从而降低数据维度,提高对数据的理解.分析 ...

  6. Python+NetworkX画图的nx.draw_networkx(函数详解)

    Python+NetworkX画图的nx.draw_networkx函数详解 Python+NetworkX画图的nx.draw_networkx(函数详解) Python+NetworkX画图的nx ...

  7. Matplotlib subplot2grid()函数详解

    Matplotlib subplot2grid()函数详解 matplotlib.pyplot 模块提供了 subplot2grid() ,该函数能够在画布的特定位置创建 axes 对象(即绘图区域) ...

  8. java canvas详解_HTML5的canvas绘图技术详解

    原标题:HTML5的canvas绘图技术详解 本篇教程探讨了HTML5的canvas绘图技术详解,希望阅读本篇文章以后大家有所收获,帮助大家HTML5+CSS3从入门到精通 . < canvas ...

  9. 【转】CreateWindow函数详解

    CreateWindow函数详解 在注册完窗口类后就需要进行窗口的创建,用到的函数理所当然就是CreateWindow(), 而这个函数是基于窗口类的,所以还需要指定几个参数来制定特定的窗口.而且像一 ...

  10. CreateWindow函数详解

    CreateWindow函数详解 在注册完窗口类后就需要进行窗口的创建,用到的函数理所当然就是CreateWindow(), 而这个函数是基于窗口类的,所以还需要指定几个参数来制定特定的窗口.而且像一 ...

最新文章

  1. 转程序员,都去写一写前端代码吧
  2. backbone学习总结(二)
  3. Android NDK开发篇(一):新版NDK环境搭建(免Cygwin,超级快)
  4. Thinkphp中Auth认证
  5. centos java发送邮件发不出去_传真机发不出传真怎么办 传真机发不出传真解决方法【详解】...
  6. sql server 2012远程链接的方法及步骤
  7. 马云发情人节寄语:AI和算法是算不清楚婚姻的
  8. Audacity Mac版教程,使用Audacity编辑音频波形图的方法步骤
  9. Wireshark工作笔记-TCP的状态解析,以及建立连接与关闭连接
  10. cortex M0 软件分层架构 RTOS
  11. 第三周读书笔记《程序员修炼之道》
  12. 探索移动Web网页编码设计
  13. 【随笔】4.上海上港
  14. c# 网口相机可以通过_双网口硬盘录像机怎么设置?录像机连接GB28181公安专网步骤指导...
  15. 大学生程序设计邀请赛(华东师范大学)C:袋鼠妈妈找孩子
  16. Handler机制使用时候一些问题记录
  17. difference softreference and weakreference
  18. 网络上各种指数 总结 收集
  19. TP5学习(七):模型
  20. SolidWorks+thonny esp32 电磁控制,程序算法搞起来了,我的结构-仿真-电磁-控制-算法的学习之路

热门文章

  1. Sentinel控制台 1.8.0实时监控空白
  2. 移动端H5控制台调试(手机web页面控制台调试)
  3. 用js实现一个自动阅读的代码
  4. “无纸化”乘机,二维码登机牌
  5. 十个 Python 自动化常用操作
  6. 防拍照防截屏,360企业安全云推“屏幕水印”助企业破解信息安全难题
  7. CentOS7.6安装docker
  8. 美国东海岸的数据中心为风暴做好准备
  9. 错误代码:0x800F081F-0x20003。在INSTALL_UPDATES操作过程中的SAFE_OS阶段,安装失败,出现错误
  10. 2021年的理财收益,2022继续加油