【问题标题】:Sprite Kit different gravity for different sectionsSprite Kit 不同部分的不同重力
【发布时间】:2014-03-18 23:31:32
【问题描述】:

我正在构建一个飞翔的小鸟游戏,其中一半水平在水面上,另一半在水下。

如果您的鸟在空中,则有规律的重力,当您轻敲时,会施加一个直升的冲动。

如果你的鸟在水中,重力应该是负方向(上升)并且更小。当您点击时,会施加一个直下的脉冲。

我可以在不同的地方设置场景的重力吗?

如果鸟在水中,我想使用计时器来施加负力,但它到处都是。

另外,我不能只改变整个场景的重力,因为场景中的其他 SKSprite 对象应该具有不同的重力(例如,空中的一只鸟在轻敲时应该拍打,而一只鸟同时敲击时,鸽子应该在水中游泳)。

【问题讨论】:

    标签: sprite-kit game-physics skphysicsbody flappy-bird-clone


    【解决方案1】:

    世界各地的重力都是一样的,所以你不能有不同重力的区域。

    然而,仅仅因为 SpriteKit 没有为某些东西提供更高层次的抽象并不意味着它很难为自己做。 SpriteKit 的恒定重力对物体的作用与每次场景的 update: 方法运行时对物体施加相同大小和方向的力一样。

    因此,您可以在 update: 方法中在场景的上部和下部设置不同的重力。

    1. 检查您的鸟的 y 坐标。
    2. 如果低于将水与空气分开的任何阈值,请使用applyForce: 施加向上的力。如果它在水面之上,则施加向下的力。
    3. 因为每帧都会发生这种情况,所以小鸟在水面上方时会向下加速,在水面下方时会向上加速,并且在过渡后您应该会看到很好的动量损失效果。

    您需要调整力量的大小,直到它的行为恰好适合您想要的游戏玩法。当你这样做时,请注意applyForce: 的单位是SKPhysicsWorld 的重力单位的 150 倍(因为可能是 Apple 错误),并且取决于你的物理物体的质量(因为牛顿第二定律)。

    【讨论】:

    • 另外,Stack Overflow 是否有一个标签为“我的第一个 SpriteKit 项目是一个飞扬的鸟克隆”?最近好像很多这样的问题。 :D
    • 现在有。 ;) [flappy-bird-clone] 之前没有想到,但实际上是半严重的,考虑到 flappy bird 克隆创建者可能想要查找同行的问题。
    • PS:写这篇文章的时候有 58 个问题。我相信还会有更多。 ;)
    【解决方案2】:

    我对如何做到这一点有一个想法:

    1. 为上半部和下半部制作两个矩形(一个用于水,一个用于空气)
    2. 在每个矩形上创建一个物理体来模拟您想要的重力
    3. 将这些矩形设置为接触延迟
    4. 将其他对象添加到它们应该在的矩形世界中
    5. 处理主鸟: - 当锚点(可能设置在中间)接触矩形之一时, 在联系事件中将主要玩家的联系代表从第一个主体更改为第二个主体。

    这意味着你有两个重力不同的世界,主角的重力在一个新世界的接触之间切换(穿过中间)

    祝你好运

    【讨论】:

    • 重力是世界的属性,而不是个体的属性。没有一个场景一个世界,一个视图一个场景。您也许可以修改这个想法以使用两个完全独立的视图,但您需要处理一些令人讨厌的(文字)边缘情况。
    • 你是对的,对不起。我唯一的建议是只对玩家应用重力并根据他的 y 位置切换重力。对于后台使用 moveTo 之类的操作。它们不适用于重力世界,但您可以很好地复制它们的运动,并且仍然可以检测到它们的碰撞和接触。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多