理解SpriteKit节点的概念

时间:2016-01-22 00:25:42

标签: xcode swift sprite-kit skspritenode skphysicsbody

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

我更常习惯为每个节点使用不同的变量实例(例如制作数组),这使我能够非常具体地引用任何单个节点。然而,在精灵工具包中,这似乎并非如此,因为您只需创建一次并使用addChild调用它的多个实例。 (比我以前做得更好......)

这有点令我难以置信,因为我主要不了解如何测试场景或其他内容或单独引用。例如,我尝试使用removeFromParent()将某个对象从场景中移除,但我不知道如何实现以下内容:

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

在我设置一个检查每个敌人的for循环之前,这是超级低效的。我想我会在物理引擎提供的更新方法中做到这一点,但就像我说我不知道​​如何调用它。

所以我的问题基本上就是让你向我解释一下这里发生了什么的概念。假装我完全不知道这种类型的编程(我几乎不会这样做),如果你能把它分解给我,就像我五个那样会很棒:D!

谢谢!

1 个答案:

答案 0 :(得分:2)

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

获取场景中的每个节点

self.children

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

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

self.childNodeWithName("myNode")

要在触摸位置获取节点

目标C

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

夫特

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示例项目的按钮实现。