我有一张名为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
答案 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)