【问题标题】:Snake game movement issue Spritekit蛇游戏移动问题 Spritekit
【发布时间】:2015-03-18 21:37:55
【问题描述】:

我正在尝试使用 Swift 和 Spritekit 创建一个基本的蛇游戏。我有一个精灵在屏幕上移动,当我滑动时它开始向滑动方向移动。我在更新方法中执行此操作,根据滑动方向、设定速度和固定持续时间更改精灵的位置。

例如direction.x * blockMovePerSecond * CGFloat(actionDuration)

我让精灵相互跟随,但是,一旦我滑动并且第一个精灵改变方向,跟随它的精灵就沿对角线移动,而不是先在 x 轴上然后在 y 轴上移动,就像普通的蛇游戏一样.

我尝试了以下选项:

  • 尝试保持精灵在每次更新时移动的距离相等 到两个精灵之间的距离。然而,精灵跑了 我这样做时的屏幕。
  • 让第一个精灵为其余精灵创建一条路径。然而,第二个精灵 跑出屏幕,再也不会出现。我认为问题是 因为路径是开放的。

这是我在第一个精灵(蛇头)之后的精灵的移动方法代码:

{
   var temp:NSValue = lastNodeLocation // the lastnodelocation is from first sprite location
   var tempNodeDirection = lastNodeDirection
   let actionDuration = 1.0

   let distanceToMoveThisFrame = tempNodeDirection.CGPointValue() * blockMovePerSecond * CGFloat(actionDuration)
   var currentPosition = NSValue(CGPoint: blocksOfAlphabets[i].position)
   let beforeDistance = CGPoint(x: temp.CGPointValue().x - currentPosition.CGPointValue().x, y: temp.CGPointValue().y - currentPosition.CGPointValue().y)


   lastNodeLocation = NSValue(CGPoint: blocksOfAlphabets[i].position)
   // move node to new location
   var moveAction = SKAction.moveTo(temp.CGPointValue(), duration: 1.0)
   node.runAction(moveAction)
}

有人可以帮忙吗?

谢谢 舒驰

【问题讨论】:

    标签: ios swift sprite-kit


    【解决方案1】:

    你的问题是 runAction-methods 不等待完成。因此,如果您在 sprite 正在运行一个动作时调用另一个 runAction-method,新的动作将立即启动。

    您可以使用序列先完成 x 轴:SKAction:sequence

    【讨论】:

    • True.. 这很有道理。让我试试看。
    【解决方案2】:

    我认为这里最简单的做法是保留一组蛇精灵组件(我们将这些精灵称为“肋骨”)。

    每 5 秒在数组末尾添加一个新的 Rib 以使蛇生长。

    然后,在 update() 方法中每半秒(或者你希望它有多长):

    • 检查自上次更新后发生的任何滑动,并将第一根肋骨(蛇头)的方向更改为滑动方向。

    • 现在反向遍历snake数组,将节点(n)的位置设置为节点(n-1)的节点位置。

    还有其他方法可以做到,但我认为这是最简单的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-04-17
      • 1970-01-01
      • 1970-01-01
      • 2014-06-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多