3

我正在构建一个轻飘飘的小鸟游戏,其中一半水平面高于水面,另一半水平面低于水面。

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

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

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

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

另外,我不能只改变整个场景的重力,因为场景中还有其他 SKSprite 对象应该对它们施加不同的重力(例如,空中的一只鸟在敲击时应该拍打,而一只鸟会潜入同时敲击时,水应该往下游)。

4

2 回答 2

2

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

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

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

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

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

于 2014-03-19T03:19:25.593 回答
0

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

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

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

祝你好运

于 2014-03-19T01:44:12.613 回答