如何获得日冕中当前碰撞对象的索引?

时间:2015-05-24 15:35:10

标签: lua corona

我有一张名为ob1的桌子,其中包含10张图片(这些图片是随机创建的,水平移动的),我在屏幕中间有一个条形图,我已经为这两个图像启用了物理效果。实现碰撞事件监听器,以便在它们与条形图碰撞时移除ob1图像,但问题是当3-4个图像接近条形图时当第一个ob1与条形随机ob1对象发生冲突被删除而不是当前ob1对象时,如何获取当前冲突的ob1对象的id?

代码是

local ob1={}
for i=1,obslimit do
    ob1[i]=display.newImage( "images/ob1.png", 250,250)
    ob1[i].isVisible=false
    ob1[i].isAlive=false
    physics.addBody( ob1[i], "dynamic", {friction=1,bounce=0.0})
    ob1[i].gravityScale=0
    ob1[i].isBodyActive=false
end

--function to deal ob1 collision
local function ob1cols( self,event )
    if(event.phase=="began") then
        --print(self.myName..event.other.myName)
        local ob1_elem = require("mydata")
        --ob1_elem.new.isBodyActive=false
        ob1_elem.new.isVisible=false
        ob1_elem.new.isAlive=false
    end
end

--function to deal ob1 group pooling
local function getob1()
    --calling ob1 from pool
    for i=1, #ob1 do
        if not ob1[i].isAlive then
            --print( "got one" ) 
            return ob1[i]
        end
    end
    return nil
end

--function to deal obstacle spawning
local function obdecide(event)
    if (mytime==100) then
        --local ob1_elem = getob1()
        local ob1_elem = require("mydata")
        ob1_elem.new=getob1()
        if (ob1_elem.new~=nil) then
            ob1_elem.new.isVisible=true
            ob1_elem.new.isAlive=true
            ob1_elem.new.isBodyActive=true
            ob1_elem.new.x=math.random( 200,350 )
            --trying to add event listner for every object
            ob1_elem.new.myName="cactus"
            ob1_elem.new:setLinearVelocity( -20, 0 )
            ob1_elem.new.collision=ob1cols
            ob1_elem.new:addEventListener( "collision", ob1_elem.new)
        end
    elseif (mytime>100) then
        mytime=0
    end
end

2 个答案:

答案 0 :(得分:2)

-- add an ID field for each object like this:
local ob1={}
for i=1,obslimit do
    ob1[i].id = i -- ** this is what I mean ** --
    ob1[i]=display.newImage( "images/ob1.png", 250,250)
    ob1[i].isVisible=false
    ob1[i].isAlive=false
    physics.addBody( ob1[i], "dynamic", {friction=1,bounce=0.0})
    ob1[i].gravityScale=0
    ob1[i].isBodyActive=false
end
碰撞监听器中的

尝试这个实现:

function onCollision (event)
    if (event.object1.id == 1 or event.object2.id == 1) then
        -- object collided is obj1[1]
    elseif (event.object1.id == 2 or event.object2.id == 2) then
        -- object collided is obj1[2]
        -- and so on. I hope you got this so far.
    and
end

答案 1 :(得分:2)

试试这个:

  

OB1 [I]。名称= “对象”;

local function onLocalCollision( event,self )

if ( event.phase == "began" ) then

elseif ( event.phase == "ended" ) then
  if (event.other.name = "object") then
    event.other:removeSelf()
   end
 end
     

bar.collision = onLocalCollision
  bar:addEventListener(“collision”,bar)