Swift SpriteKit SKSpriteNode movement

142 Views Asked by At

this is the first time I am working with Swift SpriteKit and I am having difficulty understanding how can implement the movement of a SKSpriteNode touch other SpriteNodes that are arrows. I have positioned the images where I need to be, but when pressing one of the arrows the image doesn't move. I've looked for solutions and can't seem to find one.

import SpriteKit
import GameplayKit

class GameScene: SKScene {

    private var label : SKLabelNode?
    private var spinnyNode : SKShapeNode?

    let monkey = SKSpriteNode(imageNamed: "monkey")
    let lArrow = SKSpriteNode(imageNamed: "leftArrow")
    let rArrow = SKSpriteNode(imageNamed: "rightArrow")
    let uArrow = SKSpriteNode(imageNamed: "upArrow")
    let dArrow = SKSpriteNode(imageNamed: "downArrow")


    override func didMove(to view: SKView) {
        monkey.size = CGSize(width: 200, height: 140)
        monkey.position = CGPoint(x: view.frame.width - 300, y: view.frame.height-160)

        lArrow.position = CGPoint(x: view.frame.width-350, y: view.frame.height-600)
        lArrow.size = CGSize(width: 80, height: 50)

        rArrow.position = CGPoint(x: view.frame.width-260, y: view.frame.height-600)
        rArrow.size = CGSize(width: 80, height: 50)

        uArrow.position = CGPoint(x: view.frame.width-305, y: view.frame.height-540)
        uArrow.size = CGSize(width: 50, height: 80)

        dArrow.position = CGPoint(x: view.frame.width-305, y: view.frame.height-660)
        dArrow.size = CGSize(width: 50, height: 80)

        self.addChild(lArrow)
        self.addChild(rArrow)
        self.addChild(uArrow)
        self.addChild(dArrow)
        self.addChild(monkey)
    }

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
    for touch in (touches) { //---(1)
        let positionInScene = touch.location(in: self)
        let touchedNode = self.atPoint(positionInScene)
        if let name = touchedNode.name { //---(2)
            if name == "leftButton" {//---(3)
                //move to left
                let moveAction: SKAction = SKAction.moveBy(x: 0, y: 15, duration: 1)
                monkey.run(moveAction)
            }
            if name == "rArrow" { //---(4)
                //move to right
                let moveAction: SKAction = SKAction.moveBy(x: 15, y: 0, duration: 1)
                monkey.run(moveAction)
            }
        }
    }
}

Is there another function to use to move the SpriteNode because it doesn't go through statement(2)

0

There are 0 best solutions below