Search code examples
swiftvectordirectionprojectile

Bullet Firing In Direction Of Tap


So far, my app has a big ball in the middle and a small ball in the middle also. I would like to be able to tap anywhere on the screen and the small ball shoots in that direction. I've heard people say about creating vectors but I can't seem to get these working in swift 3. I am a beginner so sorry about a stupid question!

Here is my code:

var mainBall = SKSpriteNode(imageNamed: "Ball")

override func didMove(to view: SKView) {


    mainBall.size = CGSize(width: 300, height: 300)
    mainBall.position = CGPoint(x: frame.width / 2, y: frame.height / 2)

    self.addChild(mainBall)

}

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {

    if let touch = touches.first {
        let position = touch.location(in: self)
        print(position.x)
        print(position.y)
    }

    for touch in (touches) {
        touch.location(in: self)

        let smallBall = SKSpriteNode(imageNamed: "Ball")
        smallBall.position = mainBall.position
        smallBall.size = CGSize(width: 100, height: 100)
        smallBall.physicsBody = SKPhysicsBody(circleOfRadius: smallBall.size.width / 2)
        smallBall.physicsBody?.affectedByGravity = false

        self.addChild(smallBall)

    }
}

Solution

  • You can use actions to animate SKSprideNodes:

    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
        guard let touch = touches.first else {
            return        
        }
    
        let newPosition = touch.location(in: self)
        ...
        //assuming self.smallBall exists and is visible already:
        [self.smallBall runAction:[SKAction moveTo:newPosition duration:1.0]];
    }