如何让精灵对象设置它在触摸点的移动方向?

时间:2015-02-05 04:31:26

标签: ios objective-c xcode swift

所以我正在玩,慢慢地制作我的第一款iOS游戏。我正在尝试让我的精灵对象设置一个直线路径朝向玩家的位置(这是用户最后一次触摸的位置)。

我所拥有的代码使蜜蜂向播放器移动并在它到达时停止,而不是从屏幕的一侧穿过播放器而离开屏幕的另一侧。

    var beeSpeed = 2.0

    var moveAccross = SKAction.moveTo(CGPointMake(player.position.x,player.position.y), duration:beeSpeed)
    badBee.runAction(moveAccross)

我会经常产生许多物体,这些物体应该在它们产生时将它们的路径设置到玩家位置。

任何帮助都会很棒,

我想我已经明白了,如果有人能检查我的代码并确保它做的是正确的事情会很棒:)

let actionMove = SKAction.moveTo(CGPoint(x: player.position.x-player.position.x-bee.size.width, y: player.position.y), duration: NSTimeInterval(actualDuration))
        let actionMoveDone = SKAction.removeFromParent()
        bee.runAction(SKAction.sequence([actionMove, actionMoveDone]))

1 个答案:

答案 0 :(得分:0)

您必须计算从产卵点到播放器的斜率,然后插值到屏幕外的某个位置。

func add(location:CGPoint)
{
    let bee = SKSpriteNode(color: UIColor.redColor(), size: CGSizeMake(10, 10))
    bee.name = "Bee"
    bee.position = location
    self.addChild(bee)

    let slopeToPlayer = (bee.position.y - player.position.y) / (bee.position.x - player.position.x)
    let constant = bee.position.y - slopeToPlayer * bee.position.x

    let finalX : CGFloat = bee.position.x < player.position.x ? 500.0 : -500.0 // Set it to somewhere outside screen size

    let finalY = constant +  slopeToPlayer * finalX

    let distance = (bee.position.y - finalY) * (bee.position.y - finalY) + (bee.position.x - finalX) * (bee.position.x - finalX)
    let beeSpeed : CGFloat = 100.0
    let timeToCoverDistance = sqrt(distance) / beeSpeed

    let moveAction = SKAction.moveTo(CGPointMake(finalX, finalY), duration: NSTimeInterval(timeToCoverDistance))
    let removeAction = SKAction.runBlock { () -> Void in
        bee.removeFromParent()
        println("removed")
    }
    bee.runAction(SKAction.sequence([moveAction,removeAction]))

}