I am going to make a simple Game. my code have many bodies in on timer function (every second for example):
local function onTimer()
local sx = 20
local sy = 20
body = world:createBody{type = b2.DYNAMIC_BODY, position = {x = i*48, y = 50}}
local shape = b2.PolygonShape.new()
-- box images are 70x70 pixels. we create bodies 1 pixel smaller than that.
shape:setAsBox(20, 20)
body:createFixture{shape = shape, density = 1, restitution = 0.1, friction = 0.3}
rand = math.random(1,32)
sprite = createBoxSprite(0.6,0.6,rand)
stage:addChild(sprite)
actors[body] = sprite
actors_r[sprite] = body
table.insert(sp, sprite)
--print (sprite)
--print (sp[#sp])
sprite:addEventListener(Event.TOUCHES_BEGIN, onTouchBegin,sprite)
sprite:addEventListener(Event.TOUCHES_END, onTouchEnd,sprite)
i=i+1
all=all+1
--print(all)
if i>8 then
i=1
end
if all>88 then
print("game over")
end
end
I want remove any body on click. but with this listeners when clicked all of sprites removed only.
function onTouchBegin(e)
e:removeFromParent()
end
function onTouchEnd(e)
end
how to do this?
It actually works like this:
-- receive sprite as first parameter and event as second
function onTouchBegin(sprite, e)
-- check if event hit this exact sprite
if sprite:hitTestPoint(e.touch.x, e.touch.y) then
-- remove it from the stage
sprite:removeFromParent()
-- also lets not forget about references in actors tables
local body = actors_r[sprite]
actors[body] = nil
actors_r[sprite] = nil
-- and we could either destroy the body here
world:destroyBody(body)
-- or reuse it to attach to the next sprite
end
end