我正在使用在Lua中实现的游戏制作框架来忙于隔离。我正在使用ECS / DOP做一个简单的平台游戏,我想生成从tilemap派生的碰撞几何图形,而不仅仅是检查与所有tile的碰撞。
每个图块都有一个边界框组件,该组件指向包含基本形状的列表。每个形状将边界框的边缘存储为{{x1,y1},{x2,y2}}。此过程的第一步是解析仅包含tilename的TileMap表,然后将由row / column * grid_dimension翻译的相应边界框的副本插入到名为BBOX的表中。下一步是删除边缘的所有实例,如果它是此图像所示的副本]
这就是我被困住的地方。
所需的基本边缘删除算法如下:
等于循环中较早删除的j时,此错误。我环顾四周,还没有找到一种方法来删除lua中所有重复值的实例,只有解决方案关心唯一性。有没有人找到执行此操作或类似操作的有效方法?for i = #BBOX, 1, -1 do local edge1 = BBOX[i] for j = i, 1, -1 do local edge2 = BBOX[j] same_edge = edge1 == edge2 -- Not the actual comparison, just the outcome of it if same_edge and i ~= j then BBOX[i] = nil BBOX[j] = nil end end end
当然,问题是当i
我正在使用在Lua中实现的游戏制作框架来忙于隔离。我正在使用ECS / DOP做一个简单的平台游戏,我想生成从tilemap派生的碰撞几何体,而不是...
如果您使用每个键唯一的值,则可以更好地检测重复项。我们将这个唯一值称为edge.key
。