2015-07-19 3 views
0

У меня есть два спрайта:Как переместить спрайт в другое положение движущегося спрайта?

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) 

Моя проблема заключается в том, что игрок движется и к тому времени мяч перемещается на позицию игрока игрок находится в другой так что мяч не переместится на «фактическое» положение игрока. Есть ли способ, по которому мяч переходит к фактическому положению игрока, затем «отскакивает» от экрана?

+0

Вы попытались рассчитать, что позиция игрока будет после указанного времени и переместить там спрайт шара? – Mundi

+0

@Mundi no, как я могу это сделать? Вы можете показать пример кода? – Zablah

+0

Как сказал Мунди, вы можете переместить мяч туда, где будет игрок. Но вот что, если ваш игрок может свободно передвигаться, и вам нужно, чтобы мяч «следовал» игроку, тогда это невозможно сделать с действиями. Я не уверен, если вы ищете мяч, чтобы следовать или просто стрелять и забыть. –

ответ

0

Установить глобальную переменную и обновлять эту переменную в override func update как:

PlayerPositionUpdate = player.position 

Используйте следующий код, где и иметь свой shootBall действие прямо сейчас - или где-нибудь еще, где она не имеет дозвонились снова и снова .. его нужно вызвать только один раз. Или чаще, но тогда вам нужно удалить другие действия раньше.

var moveBall = SKAction.moveTo(PlayerPositionUpdate, duration: 0.06) 
let moveBallForever = SKAction.repeatActionForever(moveBall) 
ball.runAction(moveBallForever) 

А потом добавить, если заявление как (возможно, в update тоже):

if ball.intersectsNode(player){ 
    let ballOut = SKAction.moveTo(CGPointMake(0, self.frame.size.height) , duration: 0.05) 
    ball.removeAllActions() 
    ball.runAction(ballOut) 
} 

Может быть что-то вроде это работает .. (я не могу проверить это) .. Попробуйте, -)

Смежные вопросы