将SKSpriteNode的移动与另一个SKSpriteNode的旋转同步

时间:2017-08-09 14:44:02

标签: swift skaction

https://i.stack.imgur.com/JQ9r6.png

上面你可以看到我的游戏图像。我有敌人产卵并在y轴向下移动。玩家可以在敌人到达墙壁之前击落他们。就像现在一样,玩家正在旋转到触摸的位置。我想要的是让子弹与旋转方向相同。就像现在一样,子弹直接前进。这是子弹的代码。

func spawnBullets(towards point: CGPoint) {
    let bullet = SKSpriteNode(imageNamed: "Bullet")
    bullet.zPosition = 1
    bullet.position = CGPoint(x: player.position.x + 19, y: 
player.position.y)
    let action = SKAction.move(to: point, duration: 
TimeInterval(1))
    bullet.run(SKAction.repeatForever(action))

    self.addChild(bullet)
}

这是旋转播放器的代码:

static let Pi = CGFloat(Double.pi)
static let DegreesToRadians = Pi / 180 

override func touchesMoved(_ touches: Set<UITouch>, with event: 
UIEvent?) {
    let curTouch = touches.first!  
    let curPoint = curTouch.location(in: self)

    let deltaX = self.player.position.x - curPoint.x
    let deltaY = self.player.position.y - curPoint.y
    let angle = atan2(deltaY, deltaX)

    self.player.zRotation = angle + 90 * GameplayScene.DegreesToRadians

}

如何让子弹的方向和玩家轮换“同步”?

1 个答案:

答案 0 :(得分:0)

旋转播放器。这一切都很好。但是,如果要使用SKAction,则不会考虑旋转。它只是说明一个绝对的立场。

你想要的是将子弹移向触摸位置(带点,而不仅仅是Y):

spawnBullet(towards point: CGPoint) {
    // ...
    let action = SKAction.moveTo(location: point, duration: 3.0)
}

然后将触摸位置传递给该功能。您需要获得适当的动作持续时间,以便子弹以所需的速度行进。