所以我对 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 文件中设计场景时真正与它们交互的唯一方式。
对我有帮助的是查看苹果上的按钮实现 DemoBots示例项目。
关于xcode - 理解 SpriteKit 节点的概念,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34936940/