Swift 如何获取SKSpriteNode名称?

Swift 如何获取SKSpriteNode名称?,swift,sprite-kit,skspritenode,Swift,Sprite Kit,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(co

我正在使用我找到的代码,并试图找出如何获取对象的节点名

以下是部分代码:

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!包含(SKScene,node)
(不工作,无法在
SKScene
上测试)我想检测触摸是在对象上还是在外部。。如果在外面(触摸是一种场景),我什么都不想做

我想这样做,而不是像sprite1那样测试
let
名称的原因是我计划以编程方式创建所有
SKSpriteNode
,所以我不需要知道节点对象的名称


有什么建议吗?

您正在设置变量的名称,但没有设置SKSpriteNode的名称。应该是:

 sprite1.name = @"sprite1";
你剩下的精灵也跟着做


我注意到的另一件事是你叫self.name。我很确定self指的是场景,如果这是代码所在的地方。相反,您应该将所选的保存为SKSpriteNode并调用selected.name。

好的,我明白了。。。
self.name
只是我尝试过的众多技巧之一;-)我想了解的是如何检测我正在触摸的节点。。代码很糟糕,但我真的不明白为什么。因此,当您触摸某物时,您将选定的对象指向被触摸的节点(如果有)。然后,返回选定名称所指向的节点的名称。这使您只需触摸一个就可以访问SKSpriteNodes。如果要在触摸特定节点时执行代码,则需要检查所选node.name是否等于正在检查是否触摸的节点。如果是这样,运行一些代码。这将在您设置所选节点后立即发生。Yupp,就像您回答的另一篇帖子一样;必须这样写:
sprite1.name=“sprite1”
Ok,越来越近:-D找到了如何修复if语句:
if!包含([self],节点)
。。。真管用!但这是正确的操作方式吗?同时将
touchesedend
下的代码移动到
touchesMoved
,因此现在屏幕上的框(对象)在触摸后平稳地移动:-D