首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >方框2d概念:Gideros (LUA)

方框2d概念:Gideros (LUA)
EN

Stack Overflow用户
提问于 2014-05-07 23:39:42
回答 1查看 320关注 0票数 1

在下面提到的代码中,spritebodyground到底有什么区别?为什么在声明createBody时没有传递给ground的参数?edgeshape.new()polygonshape.new()有什么区别?

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-05-14 08:30:46

Sprite是一个空对象,用于对其他Sprite继承的对象进行分组,就像在您的例子中,愉快和悲伤的位图一样。

体是box2d中物理体的表示,它没有任何视觉表示,只有尺寸(宽度和高度)、位置、旋转和不同力的数字。通常在ENTER_FRAME事件中,您将这些值作为位置和旋转,并将它们应用于Sprite继承的对象,因此它的移动将与box2d模拟世界中的主体完全相同。

地面是一个空的虚拟box2d对象。如果不向createBody提供参数,就意味着使用了默认值,这基本上意味着您不关心它有哪些值。这种身体使用的最常见的例子是关节。

要创建一个关节,你通常需要两个身体,但是如果你想把身体通过关节附加到空气中的某个随机位置,或者是鼠标光标的动态位置,那么你可以通过创建虚拟物理对象来完成,这就是一个例子:http://appcodingeasy.com/Gideros-Mobile/Dragging-Box2d-object-in-Gideros-Mobile

在您的示例中,这个主体用于EdgeShape,它通常是用于创建世界边界的任意形状,或者在本例中是简单的接地,因此动态对象不会掉在屏幕之外。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23530298

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档