中文编程pygame游戏教程3_绘制图形

中文编程pygame游戏教程3_绘制图形

首页休闲益智画出对象更新时间:2024-05-11

(账号主页有同名详细介绍视频, 请结合观看)

pygame.绘图.方法名()可以在表层对象上绘制各种简单的形状, 比如屏幕表层.

这些函数的共同点是:

矩形(表层, 颜色, 区块, 宽度) -> 区块 多边形表层, 颜色, 区块, 宽度) -> 区块 圆表层, 颜色, 区块, 宽度) -> 区块

宽度参数: 如果宽度为 0,则填充形状。否则为形状的线条轮廓粗细程度.

绘制矩形

下面首先绘制背景颜色,然后添加三个重叠的实心矩形, 在它旁边有三个线宽增加的平行重叠矩形:

屏幕.填充(背景颜色) g.绘图.矩形(屏幕,'red',(50, 20, 120, 100)) g.绘图.矩形(屏幕,'green',(100, 60, 120, 100)) g.绘图.矩形(屏幕,'blue',(150, 100, 120, 100)) g.绘图.矩形(屏幕,'red', (350, 20, 120, 100), 1) g.绘图.矩形(屏幕,'green', (400, 60, 120, 100), 4) g.绘图.矩形(屏幕,'blue', (450, 100, 120, 100), 8)

你可以尝试修改参数并使用绘图功能。

绘制实心和轮廓椭圆

下面的代码首先绘制背景色,然后添加三个重叠的实心椭圆 在它旁边有三个线宽增加的平行重叠椭圆:

屏幕.填充(背景颜色) g.绘图.椭圆(屏幕,'red',(50, 20, 120, 100)) g.绘图.椭圆(屏幕,'green',(100, 60, 120, 100)) g.绘图.椭圆(屏幕,'blue',(150, 100, 120, 100)) g.绘图.椭圆(屏幕,'red', (350, 20, 120, 100), 1) g.绘图.椭圆(屏幕,'green', (400, 60, 120, 100), 4) g.绘图.椭圆(屏幕,'blue', (450, 100, 120, 100), 8) 检测鼠标

按下鼠标按钮将生成 鼠标按下事件 和 鼠标松开事件 事件。 移动鼠标会产生鼠标移动事件. 我们可以在代码中使用下面的方式检测到这些事件:

for 事件 in g.事件.获取(): if 事件.类型 == g.退出事件: g.退出游戏() 退出程序() elif 事件.类型 == g.鼠标按下事件: pass elif 事件.类型 == g.鼠标松开事件: pass elif 事件.类型 == g.鼠标移动事件 and 绘图中: pass 用鼠标绘制一个矩形

我们可以利用这三个事件在屏幕上画一个矩形。 我们通过对角线起点和终点来定义矩形。 我们还需要一个标志来指示鼠标按钮是否按下以及我们是否正在绘制:

开始点 = (0, 0) 大小 = (0, 0) 绘图中 = 假

当按下鼠标按钮时,我们将开始点设置为当前鼠标位置, 并标记绘图模式已启动的标志:

elif 事件.类型 == g.鼠标按下事件: 开始点 = 事件.鼠标位置 大小 = 0, 0 绘图中 = 真

当鼠标按钮被松开释放时,我们设置结束点, 并用标志指示绘图模式已结束:

elif 事件.类型 == g.鼠标松开事件: 结束点 = 事件.鼠标位置 大小 = 结束点[0] - 开始点[0], 结束点[1] - 开始点[1] 绘图中 = 假

当鼠标移动时,我们还必须检查我634119们是否在 绘图模式。如果是,我们将结束位置设置为当前鼠标位置:

elif 事件.类型 == g.鼠标移动事件 and 绘图中: 结束点 = 事件.鼠标位置 大小 = 结束点[0] - 开始点[0], 结束点[1] - 开始点[1]

最后,我们将矩形绘制到屏幕上。注意要在填充背景色后, 更新屏幕之前:

g.绘图.矩形(屏幕, 'blue', (开始点, 大小), 1) 绘制多个形状

上面的代码一次只能绘制一个矩形, 要绘制多个形状,我们需要将它们放入列表中。除了之前的变量之外,我们还添加一个矩形列表:

开始点 = (0, 0) 大小 = (0, 0) 绘图中 = 假 矩形列表=列表()

绘制对象(矩形、圆形等)时,在鼠标松开事件 中,我们创建一个矩形并将其附加到矩形列表中:

elif 事件.类型 == g.鼠标松开事件: 结束点 = 事件.鼠标位置 大小 = 结束点[0] - 开始点[0], 结束点[1] - 开始点[1] 绘图中 = 假 矩形列表.添加(g.区块类(开始点, 大小))

填充背景颜色之后,遍历矩形列表绘制对象, 同时我们换一种颜色绘制当前正在绘制的矩形:

屏幕.填充(背景颜色) for 区块 in 矩形列表: g.绘图.矩形(屏幕,'red', 区块, 3) g.绘图.矩形(屏幕, 'blue', (开始点, 大小), 1)

这是完整的文件:

from zwpy import * import zwpy.pygame_zw as g g.初始化() 屏幕宽度,屏幕高度=(800, 600) 背景颜色=(255, 255, 255) 屏幕=g.显示.设置模式( (屏幕宽度,屏幕高度) ) g.显示.设置标题('我的游戏') 开始点 = (0, 0) 大小 = (0, 0) 绘图中 = 假 矩形列表=列表() while 真: for 事件 in g.事件.获取(): if 事件.类型 == g.退出事件: g.退出游戏() 退出程序() elif 事件.类型 == g.鼠标按下事件: 开始点 = 事件.鼠标位置 大小 = 0, 0 绘图中 = 真 elif 事件.类型 == g.鼠标松开事件: 结束点 = 事件.鼠标位置 大小 = 结束点[0] - 开始点[0], 结束点[1] - 开始点[1] 绘图中 = 假 矩形列表.添加(g.区块类(开始点, 大小)) elif 事件.类型 == g.鼠标移动事件 and 绘图中: 结束点 = 事件.鼠标位置 大小 = 结束点[0] - 开始点[0], 结束点[1] - 开始点[1] 屏幕.填充(背景颜色) for 区块 in 矩形列表: g.绘图.矩形(屏幕,'red', 区块, 3) g.绘图.矩形(屏幕, 'blue', (开始点, 大小), 1) g.显示.更新() 用鼠标画多边形

要绘制多边形,我们需要将点添加到点列表中。首先,我们定义一个空点列表和一个绘图标志:

绘图中 = 假 点列表=列表()

在 鼠标按下事件中,我们将当前点添加到列表中,然后 将标志设置为 真:

elif 事件.类型 == g.鼠标按下事件: 点列表.添加(事件.鼠标位置) 绘图中 = 真

在 鼠标松开事件中,我们停用该标志:

elif 事件.类型 == g.鼠标松开事件: 绘图中 = 假

在 鼠标移动事件中,我们设置多边形列表中的最后一个点 为当前鼠标位置:

elif 事件.类型 == g.鼠标移动事件 and 绘图中: 点列表[-1]=事件.鼠标位置

如果点列表中有超过 2 个点,我们绘制一条多边形线。 每个函数返回一个边界矩形。 我们以绿色显示此边界矩形

屏幕.填充(背景颜色) if 长度(点列表) > 1: 线条区块 = g.绘图.折线(屏幕,'red', 真, 点列表, 3) g.绘图.矩形(屏幕, 'blue', 线条区块, 1)

再增加一个小功能, 按 ESCAPE 键可以删除列表中的最后一个点:

elif 事件.类型 == g.键盘按下事件: if 事件.键 == g.K_ESCAPE: if 长度(点列表) >0: 点列表.删除()

这是完整的文件:

from zwpy import * import zwpy.pygame_zw as g g.初始化() 屏幕宽度,屏幕高度=(800, 600) 背景颜色=(255, 255, 255) 屏幕=g.显示.设置模式( (屏幕宽度,屏幕高度) ) g.显示.设置标题('我的游戏') 开始点 = (0, 0) 大小 = (0, 0) 矩形列表=列表() 绘图中 = 假 点列表=列表() while 真: for 事件 in g.事件.获取(): if 事件.类型 == g.退出事件: g.退出游戏() 退出程序() elif 事件.类型 == g.键盘按下事件: if 事件.键 == g.K_ESCAPE: if 长度(点列表) >0: 点列表.删除() elif 事件.类型 == g.鼠标按下事件: 点列表.添加(事件.鼠标位置) 绘图中 = 真 elif 事件.类型 == g.鼠标松开事件: 绘图中 = 假 elif 事件.类型 == g.鼠标移动事件 and 绘图中: 点列表[-1]=事件.鼠标位置 屏幕.填充(背景颜色) if 长度(点列表) > 1: 线条区块 = g.绘图.折线(屏幕,'red', 真, 点列表, 3) g.绘图.矩形(屏幕, 'blue', 线条区块, 1) g.显示.更新()

查看全文
大家还看了
也许喜欢
更多游戏

Copyright © 2024 妖气游戏网 www.17u1u.com All Rights Reserved