跳上移动的平台

时间:2014-07-14 04:09:37

标签: lua corona game-physics

我刚刚开始使用Corona SDK,而且我在移动平台上应用物理时遇到了一些问题。

基本上我有一个从右到左移动的平台,当一个物体落在平台上没有摩擦时,物体无法随平台移动,所以一旦平台从物体下方移动,物体就会落到屏幕的底部。还有其他人有这个问题吗?我想也许物理对象失去了一些属性,但我不知道哪一个。

我希望物体可以随平台移动,方向和速度相同。

这是一个代码示例:

.....
elements = display.newGroup()
elements.anchorChildren = true
elements.anchorX = 0
elements.anchorY = 1
elements.x = 0
elements.y = 0
screenGroup:insert(elements)


player = display.newImageRect("player.png",30,50)
player.anchorX = 50
player.anchorY = 50
player.x = 80
player.y = display.viewableContentHeight - 80
physics.addBody(player, "static", {density=.1, bounce=0.1, friction=1.0})
player:setLinearVelocity( 100, -600 )
screenGroup:insert(player)
.....


....
local gameStarted = false

function jumptoplatform(event)
   if event.phase == "began" then
        if gameStarted == false then
             player.bodyType = "dynamic"
             addplatformsTimer = timer.performWithDelay(1000, addplatforms, -1)
             moveplatformsTimer = timer.performWithDelay(2, moveplatforms, -1)
             gameStarted = true
             player:setLinearVelocity( 100, -600 )
        else 
         player:setLinearVelocity( 100, -600 )
      end
    end
end


function moveplatforms()
        for a = elements.numChildren,1,-1  do
            if(elements[a].x > -150) then
                elements[a].x = elements[a].x - 6
            else 
                elements:remove(elements[a])
            end 
        end
end



function addplatforms()
    platform1 = display.newImageRect("platform.png",200,80)
    platform1.anchorX = 0
    platform1.anchorY = 1
    platform1.x = 450
    platform1.y = yPosition()
    physics.addBody(platform1, "static", {density=1, bounce=0.1, friction=1.0})
    elements:insert(platform1)

end
.....

也许我必须添加一个onCollision函数来处理它?或者使用关节?任何想法将不胜感激..

1 个答案:

答案 0 :(得分:1)

当你创建一个物理体时,“静态”体型意味着物体不会在模拟下移动,它们的行为就像它们具有无限质量一样。静态物体可以由用户手动移动,但它们不接受速度的应用。静态物体仅与动态物体碰撞,而不与其他静态物体或运动物体碰撞。 (这里有更多细节:http://docs.coronalabs.com/api/type/Body/bodyType.html

试试这样:

physics.addBody(player, "dynamic", {density=.1, bounce=0.1, friction=1.0})