Pygame Draw绘图函数的具体使用


Posted in Python onNovember 17, 2021

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:
    # 设置游戏的fps
    clock.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)
    # 绘制一个椭圆形,其线宽为2
    pygame.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默认为0
    pygame.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()

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

Pygame Draw绘图函数的具体使用

图1:Pygame绘图函数用法

到此这篇关于Pygame Draw绘图函数的具体使用的文章就介绍到这了,更多相关Pygame Draw内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Linux下用Python脚本监控目录变化代码分享
May 21 Python
详解Python实现多进程异步事件驱动引擎
Aug 25 Python
python 删除非空文件夹的实例
Apr 26 Python
在Python中给Nan值更改为0的方法
Oct 30 Python
Python Numpy库安装与基本操作示例
Jan 08 Python
python实现Dijkstra静态寻路算法
Jan 17 Python
Numpy数组array和矩阵matrix转换方法
Aug 05 Python
python opencv实现信用卡的数字识别
Jan 12 Python
虚拟机下载python是否需要联网
Jul 27 Python
基于python实现复制文件并重命名
Sep 16 Python
Python应用自动化部署工具Fabric原理及使用解析
Nov 30 Python
python 数据类型强制转换的总结
Jan 25 Python
Pygame Rect区域位置的使用(图文)
Nov 17 #Python
分析Python list操作为什么会错误
Nov 17 #Python
深入理解Pytorch微调torchvision模型
Nov 11 #Python
Python 中 Shutil 模块详情
Nov 11 #Python
django 认证类配置实现
Nov 11 #Python
Python Pandas数据分析之iloc和loc的用法详解
据Python爬虫不靠谱预测可知今年双十一销售额将超过6000亿元
You might like
php判断输入不超过mysql的varchar字段的长度范围
2011/06/24 PHP
php实用代码片段整理
2016/11/12 PHP
实现PHP中session存储及删除变量
2018/10/15 PHP
jQuery.Autocomplete实现自动完成功能(详解)
2010/07/13 Javascript
整理一些JavaScript的IE和火狐的兼容性注意事项
2011/03/17 Javascript
使用typeof判断function是否存在于上下文
2014/08/14 Javascript
Jquery日期选择datepicker插件用法实例分析
2015/06/08 Javascript
AngularJS 模块化详解及实例代码
2016/09/14 Javascript
微信小程序 两种滑动方式(横向滑动,竖向滑动)详细及实例代码
2017/01/13 Javascript
JavaScript字符串对象
2017/01/14 Javascript
jQuery中 bind的用法简单介绍
2017/02/13 Javascript
微信小程序 后台登录(非微信账号)实例详解
2017/03/31 Javascript
vue路由嵌套的SPA实现步骤
2017/11/06 Javascript
pace.js和NProgress.js两个加载进度插件的一点小总结
2018/01/31 Javascript
手把手教你用Node.js爬虫爬取网站数据的方法
2018/07/05 Javascript
vue-自定义组件传值的实例讲解
2018/09/18 Javascript
通过Kettle自定义jar包供javascript使用
2020/01/29 Javascript
vue微信分享插件使用方法详解
2020/02/18 Javascript
解决vue-photo-preview 异步图片放大失效的问题
2020/07/29 Javascript
如何在JavaScript中正确处理变量
2020/12/25 Javascript
Python中的__new__与__init__魔术方法理解笔记
2014/11/08 Python
Python的Tornado框架的异步任务与AsyncHTTPClient
2016/06/27 Python
再谈Python中的字符串与字符编码(推荐)
2016/12/14 Python
使用python编写监听端
2018/04/12 Python
python wav模块获取采样率 采样点声道量化位数(实例代码)
2020/01/22 Python
Python selenium 加载并保存QQ群成员,去除其群主、管理员信息的示例代码
2020/05/28 Python
Python钉钉报警及Zabbix集成钉钉报警的示例代码
2020/08/17 Python
使用Filters滤镜弥补CSS3的跨浏览器问题以及兼容低版本IE
2013/01/23 HTML / CSS
Html5游戏开发之乒乓Ping Pong游戏示例(三)
2013/01/21 HTML / CSS
粉红色的鲸鱼:Vineyard Vines
2018/02/17 全球购物
Clarks西班牙官方在线商店:clarks鞋
2019/05/03 全球购物
linux比较文件内容的命令是什么
2013/03/04 面试题
2014全国两会大学生学习心得体会
2014/03/10 职场文书
县长“四风”对照检查材料思想汇报
2014/10/05 职场文书
利用python做表格数据处理
2021/04/13 Python
解决Golang中ResponseWriter的一个坑
2021/04/27 Golang