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