Lua box2d-计算某种类型的对象”;分组;在一起
在一个基于物理的游戏中,我有许多彩色球。它们都互相碰撞。然而,我对那些按颜色分组的球感兴趣 因此,每个球都有一个“颜色”属性:Lua box2d-计算某种类型的对象”;分组;在一起,lua,box2d,coronasdk,game-physics,Lua,Box2d,Coronasdk,Game Physics,在一个基于物理的游戏中,我有许多彩色球。它们都互相碰撞。然而,我对那些按颜色分组的球感兴趣 因此,每个球都有一个“颜色”属性:ball.color=“red” 在“碰撞侦听器”中,我检查球是否与具有相同颜色的球碰撞: local function ballCollision ( self, event ) local otherBall = event.other if ( otherBall.color == self.color ) then -- do some stuff
ball.color=“red”
在“碰撞侦听器”中,我检查球是否与具有相同颜色的球碰撞:
local function ballCollision ( self, event )
local otherBall = event.other
if ( otherBall.color == self.color ) then
-- do some stuff here
if ( event.phase == "began" ) then
-- add the ball to the group
else
-- remove the ball from the group
end
end
end
ball.collision = ballCollision
ball:addEventListener ( "collision" )
现在,我正在考虑创建一个全局的、模块范围的、由“组”组成的表,在那里我可以保存一个由分组球组成的表。在碰撞的每个阶段开始时,我可以将一个碰撞球添加到另一个碰撞器所属的组中
每次结束后
第一阶段可以将其从组中移除
但这会带来一些(我认为是相当沉重的)计算,因为当一个球离开一个较大的组,分成几个较小的组时
是否有更好的解决方案来执行此操作?比如-得到一个“链接”对象的列表,或者至少得到每个物理对象的碰撞器列表 不幸的是,我认为当两个球分开时,你无法避免某种图形遍历检查,以确定这种分开是否导致该组成为两个组,或者该组是否因为其其他部分仍然接触而保持完整
关于获取链接对象的列表,原始的Box2D(C++)有一个函数b2Body::GetContactList(),它为您提供当前正在接触的所有其他实体的列表。您可以将其用于图形遍历检查,而不是自己跟踪连接信息。我不知道科罗纳是否为你暴露了这一点
如果你能使用它,请记住它会让你所有的身体接触,所以你需要再次检查颜色是否匹配。您还应该检查IsTouch()是否适用于触点,因为在Box2D中,触点的存在仅意味着两个固定装置的AABBs重叠
如果该功能不可用,我想您需要使用开始/结束联系人事件自己维护连接图
我在这里假设某种类型的match-x或PuyoPuyo类型的游戏,在这种情况下,我怀疑涉及的球数会导致处理太重。如果你有几百个球,是的,那会很慢