Как да получа име на SKSpriteNode?

Работя с този код, който намерих, и се опитвам да разбера как да получа имената на възлите за моите обекти?

Ето част от кода:

let sprite1 = SKSpriteNode(color: UIColor.redColor(), size: CGSize(width: 30, height: 30))
let sprite2 = SKSpriteNode(color: UIColor.greenColor(), size: CGSize(width: 30, height: 30))
let sprite3 = SKSpriteNode(color: UIColor.blueColor(), size: CGSize(width: 30, height: 30))
let sprite4 = SKSpriteNode(color: UIColor.yellowColor(), size: CGSize(width: 30, height: 30))

var selected: [UITouch: SKNode] = [:]

override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {
    /* Called when a touch begins */

    selected = [:]
    for touch: AnyObject in touches {
        let location = touch.locationInNode(self)
        selected[touch as UITouch] = nodeAtPoint(location)

        println(self.name)
    }
}

Това, което се опитвам да постигна, е да накарам println да върне името SKSprintNode (sprite1, sprite2, sprite3 или sprite4)... Опитах няколко неща, малко всичко, което получавам, е ´nil´.

Възможно ли е това?

Добавено:

И така, за да продължа, как мога да открия дали докосването е в моите обекти? Ето още малко код:

override func touchesEnded(touches: NSSet, withEvent event: UIEvent) {
    for touch: AnyObject in touches {
        let location = touch.locationInNode(self)

        for (touch, node) in selected{
            if !contains(SKScene, node){
                let action = SKAction.moveTo(location, duration: 0.1)
                node.runAction(SKAction.repeatAction(action, count: 1))
            }
        }

    }
}

С if !contains(SKScene, node) (който не работи, не може да тества на SKScene) искам да открия дали докосването е върху обекта или отвън.. Ако е отвън (докосването е SKScene) не искам да правя нищо..

Причината, поради която искам да го направя по този начин и да не тествам имена на let като т.е. sprite1 е, че планирам да направя всички SKSpriteNode програмно, така че не е необходимо да знам името на обекта на възела.

Някакви предположения?


person Kjetil    schedule 03.12.2014    source източник
comment
Добре, приближавам се :-D Открих как да поправя оператора if: if !contains([self], node)... Това работи! Но дали това е правилният начин да се направи нещо?   -  person Kjetil    schedule 04.12.2014
comment
Също така преместихте кода под touchesEnded в touchesMoved, така че сега кутиите (обектите) следват гладко докосването на екрана :-D   -  person Kjetil    schedule 04.12.2014


Отговори (1)


Вие задавате името на променливата, но не задавате името на SKSpriteNode. Трябва да бъде:

 sprite1.name = @"sprite1";

Следвайте примера за останалите си спрайтове.

Друго нещо, което забелязах е, че викате self.name. Почти съм сигурен, че self се отнася до сцената, ако там се намира този код. Вместо това трябва да запишете избраното като SKSpriteNode и да извикате selected.name.

person meisenman    schedule 03.12.2014
comment
Добре, разбирам... self.name беше само едно от многото неща, които опитах ;-) Това, което се опитвам да постигна тук, е да разбера как мога да открия кой възел докосвам.. Кодът работи, но аз наистина не мога да разбера защо :-o - person Kjetil; 04.12.2014
comment
Добре. Така че, когато докоснете нещо, вие насочвате Selected към докоснатия възел (ако има такъв). След това връщате името на възела, към който сочи избраното име. Това ви дава достъп до вашите SKSpriteNodes само като докоснете един. Ако искате да изпълните код, когато определени възли са докоснати, трябва да проверите дали избраният възел.име е равен на възела, който проверявате, ако е докоснал. Ако е така, изпълнете някакъв код. Това ще се случи веднага след като зададете избрания възел. - person meisenman; 04.12.2014
comment
Yupp, както и за другия пост, на който си отговорил; трябваше да го напиша така: sprite1.name = "sprite1" - person Kjetil; 04.12.2014