中文编程pygame游戏教程5_检测碰撞

中文编程pygame游戏教程5_检测碰撞

首页休闲益智撞击测试更新时间:2024-04-16
区块和点的碰撞

区块.碰撞点检测(点位置)如果点与区块重叠(碰撞),则该函数返回 True。

我们利用这个功能做一个用鼠标拖动矩形的实例. 使用该方法以检查鼠标单击是否发生在区块内。 如果是这种情况,我们通过鼠标拖动矩形.

变量移动中是在鼠标按钮在区块内按下时设置的。 在按钮鼠标松开之前,它保持 True。区块仅在鼠标单击区块时移动 。当区块移动时,我们添加一个蓝色轮廓。

from zwpy import * import zwpy.pygame_zw as g g.初始化() 屏幕=g.显示.设置模式( (500, 200) ) 矩形区块 = g.区块类(50, 60, 200, 80) 移动中=假 while 真: for 事件 in g.事件.获取(): if 事件.类型 == g.退出事件: g.退出游戏() 退出程序() elif 事件.类型 == g.鼠标按下事件: if 矩形区块.碰撞点检测(事件.鼠标位置): 移动中 = 真 elif 事件.类型 == g.鼠标松开事件: 移动中 = 假 elif 事件.类型 == g.鼠标移动事件 and 移动中: # 下面`事件.鼠标相对位置`前面的*是拆分出相对移动的x,y, 因为移动_ip方法必须是两个参数 矩形区块.移动_ip(*事件.鼠标相对位置) 屏幕.填充('gray') g.绘图.矩形(屏幕, 'red', 矩形区块) if 移动中: g.绘图.矩形(屏幕, 'blue', 矩形区块, 4) g.显示.更新()区块与多个点碰撞

与多个点碰撞, 可以使用点列表循环检查. 在下面的程序中,我们创建 100 个随机点, 如果它们落在矩形内,将它们涂成红色,矩形外则涂成蓝色。

每次按下 R 键时,都会创建 100 个新的随机点。

rom zwpy import * import zwpy.pygame_zw as g def 产生随机点(数目): 点列表 = 列表() for _ in 范围(数目): x = 随机整数(0, 500) y = 随机整数(0, 200) 点列表.添加((x, y)) return 点列表 g.初始化() 屏幕宽度,屏幕高度=500, 200 屏幕=g.显示.设置模式( (屏幕宽度,屏幕高度) ) 矩形区块 = g.区块类(50, 60, 200, 80) 随机点 = 产生随机点(100) while 真: for 事件 in g.事件.获取(): if 事件.类型 == g.退出事件: g.退出游戏() 退出程序() if 事件.类型 == g.键盘按下事件: if 事件.键 == g.K_r: 随机点 = 产生随机点(100) 屏幕.填充('gray') g.绘图.矩形(屏幕, 'green', 矩形区块, 2) for 点位置 in 随机点: if 矩形区块.碰撞点检测(点位置): g.绘图.圆(屏幕, 'red', 点位置, 4, 0) else: g.绘图.圆(屏幕, 'blue', 点位置, 4, 0) g.显示.更新() 区块与区块的碰撞

区块.碰撞区块检测(区块)方法检查一个区块是否与另一个区块冲突。 在下面的程序中,我们创建 50 个随机矩形,如果它们在绿色矩形内部, 就将它们着色为红色.

每次按下 R 键时,都会创建 50 个新的随机矩形。

from zwpy import * import zwpy.pygame_zw as g def 产生随机矩形(数目): 矩形列表 = 列表() for _ in 范围(数目): x = 随机整数(0, 500) y = 随机整数(0, 200) 矩形列表.添加(g.区块类(x, y, 30, 30)) return 矩形列表 g.初始化() 屏幕宽度,屏幕高度=500, 200 屏幕=g.显示.设置模式( (屏幕宽度,屏幕高度) ) 矩形区块 = g.区块类(50, 60, 200, 80) 随机矩形 = 产生随机矩形(30) while 真: for 事件 in g.事件.获取(): if 事件.类型 == g.退出事件: g.退出游戏() 退出程序() if 事件.类型 == g.键盘按下事件: if 事件.键 == g.K_r: 随机矩形 = 产生随机矩形(30) 屏幕.填充('gray') g.绘图.矩形(屏幕, 'green', 矩形区块, 2) for 矩形 in 随机矩形: if 矩形区块.碰撞区块检测(矩形): g.绘图.矩形(屏幕, 'red', 矩形, 4) else: g.绘图.矩形(屏幕, 'blue', 矩形, 4) g.显示.更新() 多个区块之间的碰撞

区块.碰撞区块检测(区块)方法检查一个区块是否与另一个区块冲突。 如果我们想知道是否有任何两个重叠的区块, 然后我们必须将每个区块相互比较。这需要进行两次的嵌套循环, 让每个区块逐个与其他区块一一比较。(这个写法有些复杂, 我们之后会使用精灵组模块的碰撞方法, 能大大简化代码)

运行下面代码, 产生30个随机矩形, 如果某个矩形与其他矩形有重叠, 就会呈现红色, 独立的矩形会呈现蓝色. 每个矩形上面还显示了它们的编号.
每次按下 R 键时,都会创建 30 个新的随机矩形。

from zwpy import * import zwpy.pygame_zw as g def 绘制文字(表层, 文本, 位置): 图像=字体.绘制(文本,真,'black') 表层.贴图(图像, 位置) def 产生随机矩形(数目): 矩形列表 = 列表() for _ in 范围(数目): x = 随机整数(0, 500) y = 随机整数(0, 200) 矩形列表.添加(g.区块类(x, y, 30, 30)) return 矩形列表 g.初始化() 屏幕宽度,屏幕高度=500, 200 屏幕=g.显示.设置模式( (屏幕宽度,屏幕高度) ) n=30 随机矩形 = 产生随机矩形(n) 字体=g.字体.系统字体('SIMHEI', 20) # SIMHEI是电脑上黑体文字的文件名称 while 真: for 事件 in g.事件.获取(): if 事件.类型 == g.退出事件: g.退出游戏() 退出程序() if 事件.类型 == g.键盘按下事件: if 事件.键 == g.K_r: 随机矩形 = 产生随机矩形(n) 屏幕.填充('gray') 重叠的矩形 = 列表() for i in 范围(n - 1): r0 = 随机矩形[i] for j in 范围(i 1, n): r1 = 随机矩形[j] if r0.碰撞区块检测(r1): 重叠的矩形.添加(r0) 重叠的矩形.添加(r1) break for i, 矩形 in 枚举(随机矩形): 颜色 = 'red' if 矩形 in 重叠的矩形 else 'blue' g.绘图.矩形(屏幕, 颜色, 矩形) 绘制文字(屏幕, 字符串(i),矩形.顶左) g.显示.更新()

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

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