了解 SpriteKit 节点的概念

Understanding the concept of SpriteKit Nodes

所以我对 SpriteKit 和 Swift 还很陌生,我并不真正理解节点背后的概念(或者 sprite-kit 中的任何东西)。我请求你向我解释节点的概念。

我更习惯于为每个节点设置一个不同的变量实例(例如创建一个数组),这使我可以非常具体地引用任何单个节点。然而,在 sprite kit 中,情况似乎并非如此,因为您只需制作一次并使用 addChild 调用它的多个实例。 (比我一直在做的好多了...)

这有点让我感到困惑,因为我主要不明白如何针对这些测试场景或其他东西或单独参考一个场景。例如,我试图使用 removeFromParent() 从场景中移除一个对象,但我不知道如何实现类似的东西:

if(enemy.position.x == 0)
{
SKAction.removeFromParent()
}

之前我会设置一个 for 循环来检查每个敌人,但这是非常低效的。我想我会在物理引擎提供的更新方法中执行此操作,但正如我所说,我不知道如何调用它。

所以我的问题基本上是让你向我解释这里发生的事情的概念。假装我完全不知道这种类型的编程(我几乎不知道),如果你能像我五岁那样把它分解给我,那就太好了:D!

谢谢!

我在第一次学习 SpriteKit 时遇到了类似的麻烦,来自于使用 UI* 对象。

获取场景中的每个节点

self.children

或者您可以将 //* 传递给 enumerateChildNodesWithName:

获取特定节点you can reference it by name.

self.childNodeWithName("myNode")

获取触摸位置的节点

Objective-C

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    UITouch *touch = [touches anyObject];
    CGPoint positionInScene = [touch locationInNode:self];
    SKSpriteNode *touchedNode = (SKSpriteNode *)[self nodeAtPoint:positionInScene];
}

Swift

override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {

    for touch: AnyObject in touches {
        let location = (touch as UITouch).locationInNode(self)
        if let touchedNode = self.nodeAtPoint(location) {
            // Do something with node here.
        }
    }
}

我几乎总是给我的节点起一个名字,因为这使它们更容易使用。 这也是您在 .sks 文件中设计场景时真正与他们互动的唯一方式。

查看 Apples DemoBots 示例项目上的按钮实现对我有帮助。