0

簡単なゲームを作っていきます。私のコードには、タイマー関数に多くの本体があります(たとえば、毎秒):

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

これを行う方法?

4

1 に答える 1

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
于 2014-01-30T17:27:42.533 に答える