2014-01-27 55 views
0

我打算做一个简单的游戏。我的代码有许多机构在定时器功能(例如每秒):Gideros游戏引擎box2d机构

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 

我想删除任何身体的点击。但是当这个听众点击时,只有所有的精灵都被移除。

function onTouchBegin(e) 
    e:removeFromParent() 
end 

function onTouchEnd(e) 

end 

该怎么办?

回答

0

实际上,它的工作原理是这样的:

-- 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