Corona SDK 如何让物体运动时不受重力影响?

我正在尝试制作一个类似 Flappy Bird 的游戏,以学习如何使用 Corona SDK 制作游戏。我有一个顶部柱子,我想让它能够线性移动。所以我使用 topColumn.setLinearVelocity(),但我也在游戏中设置了重力,使得小鸟能够适当地振翅 : )。但我的问题是,当游戏开始时,管道会因为重力而掉落到地面上。有没有办法使顶部柱子和底部柱子在不受重力影响的情况下移动呢?它们现在是动态物体,但我不知道如何使用静态物体来移动它们。

请帮忙!

local physics = require "physics"
physics.start()
physics.setGravity( 0, 100 )
...
function addColumns()

    height = math.random(display.contentCenterY - 200, display.contentCenterY + 200)

    topColumn = display.newImageRect('topColumn.png',100,714)
    topColumn.anchorX = 0.5
    topColumn.anchorY = 1
    topColumn.x = display.contentWidth
    physics.addBody(topColumn, "dynamic", {density=0, bounce=0, friction=0})
    topColumn.y = height - 160
    topColumn:setLinearVelocity( -20,0 )

    bottomColumn = display.newImageRect('bottomColumn.png',100,714)
    bottomColumn.anchorX = 0.5
    bottomColumn.anchorY = 0
    bottomColumn.x = display.contentWidth
    bottomColumn.y = height + 160
    physics.addBody(bottomColumn, "dynamic", {density=0, bounce=0, friction=0})
    bottomColumn:setLinearVelocity( -20,0 )

end
...
点赞
用户7026995
用户7026995

看起来你需要运动学对象。

从 Corona 文档 中获取以下内容:

"dynamic" - 动态对象完全是被模拟的。它们可以在代码中手动移动,但通常根据像重力或反应性碰撞力这样的力来移动。这是 Box2D 中物理对象的默认身体类型。 动态对象可以与所有身体类型碰撞。

"static" - 静态对象在模拟下不会移动,它们的行为就好像它们拥有无限的质量。静态对象可以由用户手动移动,但不接受速度的应用。静态对象仅与动态对象碰撞,而不与其他静态对象或运动学对象碰撞。

"kinematic" - 运动学对象只根据它们的速度在模拟下移动。运动学对象不会受到像重力这样的力的影响。它们可以由用户手动移动,但通常通过设置它们的速度来移动。运动学对象仅与动态对象碰撞,而不与其他运动学对象或静态对象碰撞。

2017-06-29 21:59:26