Python 当一个对象与另一个对象碰撞时从矩阵中减去值
现在,我有一个类可以创建网格,将对象与网格对齐,然后当对象在网格上移动时,它计算对象与特定单元重叠的次数 我的目标是,不是计算重叠的数量,而是从N值中减去重叠的数量。例如,当hitGrid中的值为10时,程序将从10中减去,并在hitGrid为0时结束,而不是结束程序 这是我的密码:Python 当一个对象与另一个对象碰撞时从矩阵中减去值,python,arrays,matrix,pygame,Python,Arrays,Matrix,Pygame,现在,我有一个类可以创建网格,将对象与网格对齐,然后当对象在网格上移动时,它计算对象与特定单元重叠的次数 我的目标是,不是计算重叠的数量,而是从N值中减去重叠的数量。例如,当hitGrid中的值为10时,程序将从10中减去,并在hitGrid为0时结束,而不是结束程序 这是我的密码: 宽度、高度、边距=10,10,1 对象=[[1]] 类GridObject(pg.sprite.sprite): 定义初始化(自身、位置、网格、*组): 超级()。\uuuu初始化\uuuuu(组) #从网格创建图
宽度、高度、边距=10,10,1
对象=[[1]]
类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))
颜色=黑色
对于范围内的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、hitGrid、hitList):
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]*(高度+边距)
#增量接触填充
全球最大命中率
最大命中率=0
oldHitList=hitList[:]
hitList.clear()
对于范围内的c(self.gridsize[0]):
对于范围内的r(self.gridsize[1]):
p=gridpos[1]+r,gridpos[0]+c
如果oldHitList中有p:
hitList.append(p)
elif自网格[r][c]==1:
如果p[0]
这里并不完全清楚您的意图是什么,因为上面的代码在一些方面是不完整的。。。也就是说,你应该考虑一些策略。现在,您正在尝试计算的代码块将获得“年度丑陋代码块”奖,所以我们需要做点什么
有几件事需要考虑
old_gridpos = None <- set at start of game
# compute new pos in update()
if current_gridpos != old_gridpos:
check for grid square usage (see below)
old_gridpos = current_gridpos
您可以创建一个类似的函数,并在计算完
gridpos
之后,从update
函数调用它。您能举一个Numpy的例子吗?我想看看会是什么样子。这似乎很有趣
In [12]: grid_count = {}
In [13]: max_hits = 3
In [14]: def check_max_hits(position):
...: grid_count[position] = grid_count.get(position, 0) + 1
...: if grid_count[position] >= max_hits:
...: return True
...: return False
...:
...:
In [15]: check_max_hits((1,2))
Out[15]: False
In [16]: check_max_hits((2,4))
Out[16]: False
In [17]: check_max_hits((1,2))
Out[17]: False
In [18]: grid_count
Out[18]: {(1, 2): 2, (2, 4): 1}
In [19]: check_max_hits((1,2))
Out[19]: True