如何将精灵移动到其他移动的精灵实际位置?

时间:2015-07-19 23:51:01

标签: ios swift sprite-kit

我有两个精灵:

var player = SKSpriteNode()
var ball = SKSpriteNode()

我希望ball移动到player位置,虽然玩家也从左向右移动:

var playerMovementRight = SKAction.moveToX(CGRectGetMaxX(self.frame) - playerTexture.size().width / 2, duration: 2)
var playerMovementLeft = SKAction.moveByX(-self.frame.size.width + playerTexture.size().width , y: 0, duration: 2)
var playerMovement = SKAction.repeatActionForever(SKAction.sequence([playerMovementRight,playerMovementLeft]))
player.runAction(playerMovement)

这是我将ball移至player位置的代码:

var moveBall = SKAction.moveTo(player.position, duration: 0.06)

最后我"反弹"使用此代码将球带出屏幕:

var ballOut = SKAction.moveTo(CGPointMake(0, self.frame.size.height) , duration: 0.05)

我执行操作:

var shootBall = SKAction.sequence([moveball,ballOut])
player.runAction(shootBall)

我的问题是玩家正在移动,当球移动到玩家位置时,玩家处于另一个位置,因此球并没有真正移动到玩家身上#34;实际"位置。 有没有办法让球进入球员实际位置然后反弹#34;在屏幕外?

1 个答案:

答案 0 :(得分:0)

设置全局变量并在PlayerPositionUpdate = player.position 中更新此变量,如:

shootBall

使用以下代码,您现在正在执行var moveBall = SKAction.moveTo(PlayerPositionUpdate, duration: 0.06) let moveBallForever = SKAction.repeatActionForever(moveBall) ball.runAction(moveBallForever) 操作 - 或者其他地方不会一遍又一遍地调用它...它应该只调用一次。或者更常见,但之后你必须删除其他操作。

update

然后添加一个if语句(也许在if ball.intersectsNode(player){ let ballOut = SKAction.moveTo(CGPointMake(0, self.frame.size.height) , duration: 0.05) ball.removeAllActions() ball.runAction(ballOut) } 中):

PM> update-database -Verbose

也许像这样的东西......(我无法测试它)..尝试一下; - )