通过名称 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 个SKSpriteNode
s。
我有一个每个精灵位置的矩阵,在这个矩阵中我存储了精灵的名称。我需要将精灵移动到新位置。
如何按名称获取以下精灵:
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 独有的属性(即texture
或colorBlendFactor
)时执行此操作。这意味着使用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 (Swift) - 如何在按钮上存储图像文件的名称