移动时如何访问 SKSpriteNode 子类的对象(Swift)

Posted

技术标签:

【中文标题】移动时如何访问 SKSpriteNode 子类的对象(Swift)【英文标题】:How to access objects of SKSpriteNode subclass when moving them (Swift) 【发布时间】:2016-03-27 07:02:11 【问题描述】:

我对我的类 Card 的对象感到困惑,它是 SKSpriteNode 的子类。当用户移动它们时如何访问这些对象。到目前为止,我只能访问覆盖 touchesEnded 函数的 SKNode 对象。

override func touchesEnded(touches: Set<UITouch>, withEvent event: UIEvent?) 
    let touch : UITouch = touches.first as UITouch!
    let touchLocation = touch.locationInNode(self)
    touchedNode = self.nodeAtPoint(touchLocation)
    touchedNode.position = CGPoint(x: size.width * 0.5, y: size.height * 0.5)
    touchedNode.zPosition = 0

我需要知道用户正在移动什么对象,但在这种情况下,当 touchNode 是 SKNode 类的对象(不是我的 Card 对象类)时,我无法弄清楚。

【问题讨论】:

【参考方案1】:

is 运算符正是您所需要的。

is 运算符比较两个操作数的类型。如果它们属于同一类型,或者其中一个是另一个的子类,则表达式的计算结果为 true。

所以你可以这样检查:

if touchedNode is Card 
    // do stuff

现在您可能想要做的是,如果touchedNode 真的是Card,我想使用我在touchedNode 上的Card 类中定义的方法。

为此,您需要将touchedObject 转换为Card

let cardNode = touchedNode as! Card

然后你可以在cardNode上调用你的方法!

【讨论】:

以上是关于移动时如何访问 SKSpriteNode 子类的对象(Swift)的主要内容,如果未能解决你的问题,请参考以下文章

缩放 SKSpriteNode 而不缩放其子节点

在 Xcode 中,单击时如何让 SkSpriteNode 向上移动?

SKSpriteNode 的正确子类化和实例初始化

SpriteKit touchesMoved 在 SKSpritenode 的子类中使用时不稳定

如何在Swift中正确地从父节点中删除SKSpriteNode的子类(要从数组中移除,屏幕上的空格......)?

如何加入两个碰撞的 SKSpriteNode