仅在y方向应用SpriteKit Physics

时间:2015-11-23 07:05:01

标签: ios sprite-kit swift2 skphysicsbody

我想创建一个带跳球的简单游戏。想法是球在上下跳跃(在y方向):

enter image description here

我的问题是,SpriteKit的PhysicsEngine也沿着x轴移动球(当然)。有办法防止这种情况吗?

enter image description here

非常感谢, 斯特凡

3 个答案:

答案 0 :(得分:0)

如果您希望球不在x轴上移动,可以在position.x函数中将其update()设置为指定值。

答案 1 :(得分:0)

在SpriteKit中移动节点可以通过以下几种方式完成:

  1. 使用SKAction
  2. 使用物理引擎和applyImpulse:applyForce:方法
  3. 直接更改节点物理主体的velocity属性
  4. 通过更改节点的position属性
  5. 重要的是何时使用什么。

    使用物理移动节点

    如果您对真实的物理模拟以及接触检测感兴趣,并且您想让球与不同的物体发生碰撞,或者让它受到重力场等的影响,您应该坚持使用applyImpulse:和applyForce:方法(或你甚至可以改变节点物理体的速度矢量。此外,在这种情况下不建议使用SKAction,因为基本上你是在节点与物理模拟不同步(SO上有很多关于此的帖子)。

    如果您对真实物理模拟(碰撞等)不感兴趣,但仅在接触检测中,您可以在使用动作移动时将物理实体连接到节点。在这种情况下,您应该将节点物理主体的collisionBitMask设置为0。

    通过更改物理主体的速度属性来移动节点

    这是将具有附加物理主体的节点移动到它的常规方法。如果您想要完全控制节点应该随时移动的方式,这可能很有用。如果您正在移动这样的节点,则不应尝试使用操作移动节点(不应混用这两种技术)。

    移动带有操作的节点

    动作是移动节点的非常方便的方法。如果您只想将节点从A点移动到B点,那么这是最简单的方法。您可以使用名称运行操作,稍后在代码中可以使用该名称访问该操作,这样您就可以完全控制该操作(您可以停止它,暂停或加快它)。

    此外,SKAction类中还有一些方法可以让您以简单的方式以多种方式移动节点...例如,您可以使用followPath: duration:方法沿预定义路径移动节点。

    通过更改位置属性来移动节点

    只有在对真实物理模拟不感兴趣时​​,才应更改节点的位置属性。您仍然可以利用接触检测并将物理主体连接到节点,同时移动这样的节点。

答案 2 :(得分:0)

SKPhysicsBody具有一个名为allowsRotation的属性。将其设置为false。将此与didSimulatePhysics答案的更改一起使用。参考 https://developer.apple.com/documentation/spritekit/skphysicsbody/1519986-allowsrotation