Python 使用矩阵时测试两个精灵是否重叠

Python 使用矩阵时测试两个精灵是否重叠,python,matrix,pygame,collision-detection,overlap,Python,Matrix,Pygame,Collision Detection,Overlap,现在,我有一个球,它在屏幕上以随机的对角线方向移动,当球与它碰撞时,它会从墙上反弹 我想做什么: 如果球越过网格中的一个单元格/方框,请使该单元格/方框变为红色,然后继续更改颜色,直到该特定点的次数为10。如果该值等于10,则程序结束 让我给你一个场景:假设我有一个3x3的网格,网格中的每个单元格的值为0。每次球经过一个单元格时,该值都会增加1,直到球碰到3为止。每次值增加时,该单元格的颜色都会改变。0=白色,1=红色,2=绿色,3=蓝色。这就是我想要的输出 到目前为止我拥有的: 整个屏幕变为红

现在,我有一个球,它在屏幕上以随机的对角线方向移动,当球与它碰撞时,它会从墙上反弹

我想做什么: 如果球越过网格中的一个单元格/方框,请使该单元格/方框变为红色,然后继续更改颜色,直到该特定点的次数为10。如果该值等于10,则程序结束

让我给你一个场景:假设我有一个3x3的网格,网格中的每个单元格的值为0。每次球经过一个单元格时,该值都会增加1,直到球碰到3为止。每次值增加时,该单元格的颜色都会改变。0=白色,1=红色,2=绿色,3=蓝色。这就是我想要的输出

到目前为止我拥有的: 整个屏幕变为红色,而不仅仅是单个单元格。 我现在只是测试一种颜色,但是我想添加多种颜色

用于范围内的行(网格):
对于范围内的列(GRIDX):
rect=[(边距+宽度)*列+边距,(边距+高度)*行+边距,宽度,高度]
颜色=白色
如果GRIDY或GRIDX==1:
颜色=红色
pg.draw.rect(屏幕、颜色、rect)
以下是代码的其余部分供参考:

导入系统 输入数学 从随机输入范围 导入pygame作为pg #定义一些颜色 黑色=(0,0,0) 白色=(255,255,255) 绿色=(0,255,0) 红色=(255,0,0) #定义度量 宽度、高度、边距=10,10,1 GRIDX,GRIDY=91,36 类GridObject(pg.sprite.sprite): 定义初始化(自身、位置、网格、*组): 超级()。\uuuu初始化\uuuuu(组) #从网格创建图像 self.grid=grid self.gridsize=(len(网格[0]),len(网格)) imgsize=self.gridsize[0]*(宽度+边距),self.gridsize[1]*(高度+边距) self.image=pg.Surface(imgsize,flags=pg.SRCALPHA) self.image.fill((0,0,0,0)) 列=(235、175、76) 对于范围内的c(self.gridsize[0]): 对于范围内的r(self.gridsize[1]): 如果自网格[r][c]==1: 矩形=[(边距+宽度)*c+边距,(边距+高度)*r+边距,宽度,高度] pg.draw.rect(self.image,col,rect) self.rect=self.image.get_rect(中心=pos) self.vel=pg.math.Vector2(8,0).旋转(随机范围(360)) self.pos=pg.math.Vector2(pos) def更新(self,boundrect): self.pos+=self.vel self.rect.center=self.pos 如果self.rect.left=boundrect.right: 自我等级x*=-1 如果self.rect.top=boundrect.bottom: 自我水平y*=-1 #将矩形与网格对齐 gridpos=圆形(自校正x/(宽度+边距)),圆形(自校正y/(高度+边距)) self.rect.topleft=gridpos[0]*(宽度+边距),gridpos[1]*(高度+边距) ballGrid=[[0,1,1,1,0], [1, 1, 1, 1, 1], [1, 1, 1, 1, 1], [1, 1, 1, 1, 1], [0, 1, 1, 1, 0]] def main(): #重叠=错误 screen=pg.display.set_模式((GRIDX*(宽度+边距)+边距,GRIDY*(高度+边距))) #设置屏幕标题 pg.display.set_标题(“带网格的球”) 时钟=pg.time.clock() sprite_group=pg.sprite.group() ball=GridObject((495193),ballGrid,sprite_组) 完成=错误 虽然没有这样做: 对于pg.event.get()中的事件: 如果event.type==pg.QUIT: 完成=正确 #用于跟踪栅格坐标 如果event.type==pg.MOUSEBUTTONDOWN: #单击“获取位置”屏幕 pos=pg.mouse.get_pos() #将x/y屏幕坐标更改为栅格坐标 列=位置[0]/(宽度+边距) 行=位置[1]/(高度+边距) #将该位置设置为1 网格[行][列]=1 打印(“单击”,位置,“网格坐标:”,行,列) 屏幕填充((0,0,0)) #绘制网格并向单元格添加值 对于范围内的行(网格): 对于范围内的列(GRIDX): rect=[(边距+宽度)*列+边距,(边距+高度)*行+边距,宽度,高度] 颜色=白色 如果GRIDY或GRIDX==1: 颜色=红色 pg.draw.rect(屏幕、颜色、rect) sprite_group.update(screen.get_rect()) sprite_组绘制(屏幕) pg.display.flip() 时钟滴答(30) 如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu': 第init页() main() 第页退出 sys.exit() 顺便说一句,如果这看起来相似,我的另一个帐户会发布以下问题:

链接到图像:

假设我有一个3x3的网格,网格中的每个单元格的值为0。每次球经过一个单元格时,该值都会增加1,直到球碰到3为止。每次值增加时,该单元格的颜色都会改变。0=白色,1=红色,2=绿色,3=蓝色。这就是我想要的输出

你有球在一个单元格上的频率,对于每个单元格。由于球覆盖超过1个单元格(球的大小大于1个单元格),因此当球在单元格上滚动时,单元格计数器将在连续帧中递增多次。
因此,在允许其计数器再次递增之前,必须确保球已离开单元格

创建整型值的二维数组(嵌套列表),用字段大小的0初始化。该字段会损坏单元格的命中计数器。此外,创建一个列表(
hitList
),其中存储在一帧中被命中的单元格的索引

hitGrid=[[0代表范围内的i(GRIDX)]代表范围内的j(GRIDY)]
hitList=[]
网格(
hitGrid
)和列表(
hitList
)必须传递给
更新
me