所以我对SpriteKit和Swift都很陌生,而且我并不真正理解节点背后的概念(或者实际上是sprite-kit中的任何东西)。我请你向我解释节点的概念。
我更常习惯为每个节点使用不同的变量实例(例如制作数组),这使我能够非常具体地引用任何单个节点。然而,在精灵工具包中,这似乎并非如此,因为您只需创建一次并使用addChild调用它的多个实例。 (比我以前做得更好......)
这有点令我难以置信,因为我主要不了解如何测试场景或其他内容或单独引用。例如,我尝试使用removeFromParent()
将某个对象从场景中移除,但我不知道如何实现以下内容:
if(enemy.position.x == 0)
{
SKAction.removeFromParent()
}
在我设置一个检查每个敌人的for循环之前,这是超级低效的。我想我会在物理引擎提供的更新方法中做到这一点,但就像我说我不知道如何调用它。
所以我的问题基本上就是让你向我解释一下这里发生了什么的概念。假装我完全不知道这种类型的编程(我几乎不会这样做),如果你能把它分解给我,就像我五个那样会很棒:D!
谢谢!
答案 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示例项目的按钮实现。