我试图创建一个基本的蛇游戏使用斯威夫特和精灵。我有一个雪碧在屏幕上移动,当我刷它开始向刷方向移动。我在update方法中这样做,其中我根据刷卡方向、设置的速度和固定的持续时间更改精灵的位置。
例如,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)
}
有人能帮忙吗?
谢谢
舒驰
最佳答案
你的问题是runAction方法不会等待完成。因此,如果在sprite正在运行操作时调用另一个runAction方法,则新操作将立即启动。
你可以用序列来完成X轴的第一步:SKAction:sequence