蛇游戏运动问题Spritekit

时间:2015-01-20 15:25:05

标签: ios swift sprite-kit

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

e.g。 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)
}

有人可以帮忙吗?

由于 术赤

2 个答案:

答案 0 :(得分:0)

你的问题是runAction方法不等待完成。因此,如果在sprite已经运行动作时调用另一个runAction方法,则会立即启动新操作。

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

答案 1 :(得分:0)

我认为这里最简单的方法是保留一组蛇精灵组件(让这些精灵称为" Rib")。

每隔5秒钟在阵列的末尾添加一个新的Rib,以使蛇长大。

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

  • 检查自上次更新以来发生的任何滑动,并在滑动方向上更改第一个肋骨(蛇头)的方向。

  • 现在反向运行snake数组,并将node(n)的位置设置为节点(n-1)的节点位置。

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