【问题标题】:Get SKSpriteNode by name Swift 2, Xcode 7通过名称 Swift 2、Xcode 7 获取 SKSpriteNode
【发布时间】:2016-03-21 01:07:38
【问题描述】:

我有大约 120 个SKSpriteNodes。

我有一个每个精灵位置的矩阵,在这个矩阵中我存储了精灵的名称。我需要将精灵移动到新位置。

如何按名称获取以下精灵:

let sprite = SKSpriteNode(imageNamed:"BlueSquare")
sprite.name = "BlueSquare1"


// ... in another function
let newsprite = // ???? GET SKSpriteNode by name BlueSquare1????

如何按名称获取节点并在该精灵上使用SKAction.moveTo 函数?

【问题讨论】:

  • var yourSprite: SKSpriteNode = childNodeWithName("myNameSprite") as SKSpriteNode,然后是yourSprite .runAction(SKAction….)
  • var newsprite: SKSpriteNode = childNodeWithName("BlueSquare1") as! SKSpriteNode。不要忘记用as!强制向下转换它

标签: ios swift swift2 xcode7 xcode7.2


【解决方案1】:

调用子节点:

如果您已将sprite 添加到SKScene,您将可以稍后调用它以供使用。

self.addChild(sprite)

如果你想用其他方法调用它,你可以这样:

let sprite = self.childNodeWithName("BlueSpuare1") as? SKSpriteNode

注意将SKNode 转换为SKSpriteNode 的用法。您只需要在访问 SKSpriteNode 独有的属性(即texturecolorBlendFactor)时执行此操作。这意味着使用SKAction.moveTo 方法可以在SKNode 上使用,并且不需要强制转换。


如何移动精灵:

import SpriteKit
class GameScene: SKScene {
    func didMove(to: SKView) {
        let sprite = SKSpriteNode(imageNamed:"BlueSquare")
        sprite.name = "BlueSquare1"
        addChild(sprite)
        moveSquare("BlueSquare1") // Place this line anywhere you want it called
    }

    func moveSquare(_ square: String) {
        let moveTo: CGPoint = // to position
        let time: Double = // duration
        childNode(withName: square).moveTo(moveTo, duration: time)
    }
}

最后提示:

  • 请注意,调用孩子的名字不是递归的。 Swift 不会调查孙辈的名字等。
  • 如果 2 个子节点具有相同的名称,Swift 会在 children 数组中找到第一个子节点,就像你写的一样:self.children.first { $0.name == "BlueSquare1" }
  • 如果你不给你的节点一个名字,它的默认值是nil。这意味着它永远不能使用childNode(withName: String) 调用。请改用self.children.first { $0.name == nil }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-16
    • 1970-01-01
    • 2011-09-09
    相关资源
    最近更新 更多