Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Lua box2d-计算某种类型的对象”;分组;在一起_Lua_Box2d_Coronasdk_Game Physics - Fatal编程技术网

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类型的游戏,在这种情况下,我怀疑涉及的球数会导致处理太重。如果你有几百个球,是的,那会很慢