通过名称 Swift 2、Xcode 7 获取 SKSpriteNode

Posted

技术标签:

【中文标题】通过名称 Swift 2、Xcode 7 获取 SKSpriteNode【英文标题】:Get SKSpriteNode by name Swift 2, Xcode 7 【发布时间】: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!强制向下转换它 【参考方案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

【讨论】:

以上是关于通过名称 Swift 2、Xcode 7 获取 SKSpriteNode的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Swift 2 + XCode 7 + iOS 9 获取和解析 JSON [重复]

swift 2.0(XCode 7 beta 5)中的拆分方法

Xcode 7 不显示 swift 2 的函数调用者

Xcode (Swift) - 如何在按钮上存储图像文件的名称

Xcode 7.3 找不到“Project-Swift.h”文件

Swift 2 的 Xcode 7.0 更新问题