SKSpriteNode, называемый runner, движется в обратном направлении.

У меня есть SKSpriteNode под названием runner, и всякий раз, когда я касаюсь экрана, чтобы попытаться перетащить его из одного места в другое, runner движется в противоположном направлении? Например, если я попытаюсь перетащить его влево, он пойдет вправо, если я попытаюсь перетащить его вверх, он пойдет вниз. Добавление TouchesEnded не помогло. Может ли кто-нибудь посмотреть на мой код и сказать мне, почему это происходит, пожалуйста?

    import UIKit
    import Foundation
    import SpriteKit

    class Maze: SKScene {

        let runner = SKSpriteNode(imageNamed: "Spaceship")

        override func didMoveToView(view: SKView)
        {
            self.createRunner()
        }


        override func touchesBegan(touches: NSSet, withEvent event: UIEvent)
        {
            let touch = touches.anyObject()! as UITouch
            let location = touch.locationInView(self.view)
            runner.position = location
        }

        override func touchesMoved(touches: NSSet, withEvent event: UIEvent)
        {
            let touch = touches.anyObject()! as UITouch
            let location = touch.locationInView(self.view)
            runner.position = location
        }

        func createRunner()
        {
            runner.setScale(0.50)
            runner.position = CGPointMake(0, 0)
            runner.name = "RunnerNode"
            self.addChild(runner)
        }

    }

person Hide Shidara    schedule 10.06.2015    source источник
comment
Я перепробовал множество его вариаций на разных симуляторах. У вас есть идеи, что это может быть?   -  person Hide Shidara    schedule 10.06.2015
comment
Может, попробовать использовать locationInNode() вместо locationInView()? locationInNode() относится только к SpriteKit.   -  person Jonathan    schedule 10.06.2015
comment
Джонатан Дхармеш Кхени Спасибо, сработало.   -  person Hide Shidara    schedule 10.06.2015


Ответы (1)


Этот код работает нормально:

    import SpriteKit

    class GameScene: SKScene {

    let runner = SKSpriteNode(imageNamed: "Spaceship")

    override func didMoveToView(view: SKView)
    {
        self.createRunner()
    }


    override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) {
        var touch = touches.first as! UITouch
        var touchLocation = touch.locationInNode(self)
        runner.position = touchLocation
    }

    override func touchesMoved(touches: Set<NSObject>, withEvent event: UIEvent) {
        var touch = touches.first as! UITouch
        var touchLocation = touch.locationInNode(self)
        runner.position = touchLocation
    }

    func createRunner()
    {
        runner.setScale(0.50)
        runner.position = CGPointMake(0, 0)
        runner.name = "RunnerNode"
        self.addChild(runner)
    }
}
person Dharmesh Kheni    schedule 10.06.2015