xcode - 理解 SpriteKit 节点的概念

标签 xcode swift sprite-kit skspritenode skphysicsbody

所以我对 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/

相关文章:

ios - 具有许多 subview 的 UIScrollView 需要时间来处理

给定深度节点的 Swift 二叉树列表

swift - 如何在 Swift 4 中仅将 NSButton 的一侧的角圆角化?

ios - UITableView 设置 heightForRowAt 是 CGFloat.leastNormalMagnitude ,但它崩溃了

ios - 如何正确检测接触和碰撞? Swift iOS SKScene

iphone - Tab Bar Controller Inside Nav Controller,可以吗?

ios - UITextField __CFStringEncodeByteStream EXC_BAD_ACCESS

xcode - iPhone 崩溃可能与 NSUserDefaults 有关

swift - SpriteKit 和 Swift 中的 SKPhysicsJoint 已修复

ios - SKNode线程安全吗?