如何让一个英雄物理身体静静地躺在一个移动的平台物理身体上?

时间:2017-04-25 18:29:49

标签: swift sprite-kit box2d

我的游戏有一个带4个座位的摩天轮。每个座位都有一个英雄可以休息的平台。当座位处于向上轨迹时,英雄平静地停留在平台上。

但是,当座位处于向下轨迹时,英雄会上下移动一点。

我尝试了一些显而易见的事情: 1.将恢复原状设置为0无效。 2.将linearDamping设置为1无效。 3.使平台和英雄的质量相同没有效果。 4.调整摩擦力没有影响。

这是平台物理主体:

        supportNode?.physicsBody?.categoryBitMask = PhysicsCategory.ferrisPlatform.rawValue
        supportNode?.physicsBody?.mass = 1000
        supportNode?.physicsBody?.restitution = 0.0
        supportNode?.physicsBody?.friction = 0.0
        supportNode?.physicsBody?.linearDamping = 1.0

这是英雄身体:

    self.physicsBody?.linearDamping = 1.0
    self.physicsBody?.mass = 30
    self.physicsBody?.restitution = 0
    self.physicsBody?.friction = 0

感谢您的任何提示。在摩天轮上骑行时,英雄很好,但在向下的路上只显示古怪的上/下运动,这绝对是奇怪的。

3 个答案:

答案 0 :(得分:2)

对我来说,这似乎是一个质量问题。平台的质量与它无关,因为我读到它固定在方向盘上。所以你应该增加球员的质量。  如果你进入摩天轮并使其旋转得足够快,那么在下降时你也会漂浮。将恢复原状设置为0可以避免反弹,但它无助于保持一个轻型物体到位:它的速度不够快。

此外,您可能希望实际增加摩擦力,以便身体不会滑动。 0摩擦就像坐在冰上一样。

答案 1 :(得分:0)

在物理计算后手动调整玩家的位置..在didSimulatePhysics

if player.isOnPlatform {

    player.position.y = platform.position.y // Maybe +1 or something like that

}

现在,只需在didBegin(contact中与平台建立联系时,添加联系人代表即可开启/关闭:

if player.position.y > platform.position.y { // So jumping under the platform wont warp you to the top
  player.isOnPlatform = true // Make sure to toggle this off at the right times as well, such as in you player.jump() method.
}

你将不得不做其他问题可能会出现的bitmasks等调整它,但这是一个很好的方法,我认为不会影响玩家的重力/向下力量,当你在游戏中时会破坏游戏的感觉平台。

答案 2 :(得分:0)

在英雄身上将恢复原状设置为-1.0,平台为我解决了这个问题。这与恢复原状的文件相冲突,该文件说:"该属性必须是介于0.0和1.0之间的值"