1

sprite以下のコードでは、bodyとの違いは何groundですか? createBody宣言中にパラメーターが渡されないのはなぜgroundですか? edgeshape.new()とはどう違いpolygonshape.new()ますか?

require "box2d"

b2.setScale(20)

-- this function creates a box sprite with 2 happy and sad children
local function createBoxSprite(sx, sy)
    local happy = Bitmap.new(Texture.new("happy-box.png", true))
    happy:setAnchorPoint(0.5, 0.5)

    local sad = Bitmap.new(Texture.new("sad-box.png", true))
    sad:setAnchorPoint(0.5, 0.5)

    local sprite = Sprite.new()
    sprite:addChild(happy)
    sprite:addChild(sad)

    sprite:setScale(sx, sy)

    return sprite
end

-- this table holds the dynamic bodies and their sprites
local actors = {}

-- create world
local world = b2.World.new(0, 9.8)

-- create a ground body and attach an edge shape
local ground = world:createBody({})
local shape = b2.EdgeShape.new(-200,480,520,480)
ground:createFixture({shape = shape, density = 0})

-- every 3 seconds, we create a random box
local function onTimer()
    local sx = math.random(70, 100) / 100
    local sy = math.random(70, 100) / 100

    local body = world:createBody{type = b2.DYNAMIC_BODY, position = {x = math.random(0, 320), y = -35}}

    local shape = b2.PolygonShape.new()
    -- box images are 70x70 pixels. we create bodies 1 pixel smaller than that.
    shape:setAsBox(34.5 * sx, 34.5 * sy)

  body:createFixture{shape = shape, density = 1, restitution = 0.1, friction = 0.3}

    local sprite = createBoxSprite(sx, sy)
    stage:addChild(sprite)

    actors[body] = sprite
end
4

1 に答える 1