在 SpriteKit 中如何对多个 Sprite 应用一个动作?
How do you apply one action to multiple Sprites in SpriteKit?
如果我的屏幕顶部有一个人,底部有一个人稍后进来,我希望他们都使用我的 moveToLeftOfScreen
移动到屏幕左侧我创建的操作,我该怎么做?
如果我有 var moveToLeftOfScreen = SKAction.moveTo(CGPoint(x:blhabhla, y:bhlahbla, duration: 3))
将不允许某些东西从它产生的地方沿直线向左移动。
长话短说:你能做一个动作说 "Move to the left until you hit the screen, then move back to the right until you hit the screeN" 并将其应用于在不同时间在不同位置产卵的事物,然后只应用它在整个代码中需要时执行操作,而不是为每个高度编写不同的操作。
与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
。
如果我的屏幕顶部有一个人,底部有一个人稍后进来,我希望他们都使用我的 moveToLeftOfScreen
移动到屏幕左侧我创建的操作,我该怎么做?
如果我有 var moveToLeftOfScreen = SKAction.moveTo(CGPoint(x:blhabhla, y:bhlahbla, duration: 3))
将不允许某些东西从它产生的地方沿直线向左移动。
长话短说:你能做一个动作说 "Move to the left until you hit the screen, then move back to the right until you hit the screeN" 并将其应用于在不同时间在不同位置产卵的事物,然后只应用它在整个代码中需要时执行操作,而不是为每个高度编写不同的操作。
与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
。