如何在SpriteKit中将一个动作应用于多个Sprite?

时间:2015-06-18 00:23:00

标签: swift sprite-kit action

如果我在屏幕顶部找到了一个家伙,而且后来在底部有一个家伙,我希望他们都使用moveToLeftOfScreen移到屏幕左侧我已创建的动作,我该怎么做?

如果我有变种moveToLeftOfScreen = SKAction.moveTo(CGPoint(x:blhabhla, y:bhlahbla, duration: 3)),那么就不会让某些东西从它产生的地方沿着一条直线向左移动。

长话短说:你能做出一个单一动作,说明"向左移动直到你触屏,然后向右移动直到你击中screeN" 并将其应用于在不同时间在不同位置产生的事物,然后在需要时在整个代码中应用该操作,而不是为每个高度编写不同的操作。

1 个答案:

答案 0 :(得分:0)

与sangony相反,我认为这很可能,虽然我可能会遗漏一些东西。

您是否可以创建对SKAction的引用,该引用是移动到X = 0并移动到X = size.width的序列?并且永远重复。

我不在我的Mac附近所以我不能在XCode中获得完美的语法,所以对任何错误道歉。此外,这假设场景将创建此引用,因此self.size.width

let moveLeft = SKAction.moveToX(0, duration: 3)
let moveRight = SKAction.moveToX(self.size.width, duration: 3)
let moveLeftThenRight = SKAction.sequence([moveLeft, moveRight])
let continousMovement = SKAction.repeatActionForever(moveLeftThenRight)

将该最终操作应用于任何产生的节点,如果我理解正确,您应该没问题。

第一个动作会出现问题,因为无论节点产生的位置如何,向左移动总是需要3秒。这可以通过获得它需要移动的距离的分数并将其乘以3来解决:

let firstMovementDuration = (node.position.x / self.size.width) * 3
let firstMoveLeft = SKAction.moveToX(0, duration: firstMovementDuration)

从那里继续正常运动。还有timingMode要考虑更自然的移动,例如.EaseInEaseOut