有没有办法在 SKSpriteNode 中分配和调用变量?

Posted

技术标签:

【中文标题】有没有办法在 SKSpriteNode 中分配和调用变量?【英文标题】:is there a way assign and call variables in a SKSpriteNode? 【发布时间】:2019-04-10 09:11:52 【问题描述】:

我正在尝试创建一个游戏,其中用户触摸球,如果他们触摸带有正确数字的球,它就会增加他们的分数。

我在球上放了一个标签来显示球号。

当用户按下球时,我希望它检查球上的标签并将其与变量进行比较以查看它们是否匹配。

我尝试调用 myLabel.text 的值,但 xcode 告诉我它无效。

将变量存储到 SKSpriteNode 中以便在用户按下 SKSpriteNode 时进行比较的最佳方法是什么。

谢谢。

这是我的代码 -->

func createBallNode(ballNumber: Int) -> SKSpriteNode
    //set up a ball
    let ball = SKSpriteNode(imageNamed: "ballimage.png")
    ball.size = CGSize(width:200, height:200)
    ball.name = "ballSpriteNode"
    ball.physicsBody = SKPhysicsBody(rectangleOf: ball.frame.size)
    ball.physicsBody?.usesPreciseCollisionDetection = true

    let myLabel = SKLabelNode(fontNamed:"Helvetica")
    myLabel.text = String(ballNumber)
    myLabel.name = "myLabel"
    myLabel.fontSize = 80
    myLabel.fontColor = UIColor.black
    myLabel.position = CGPoint.zero

    ball.addChild(myLabel)
    return ball


override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) 
    let touch:UITouch = touches.first!
    let positionInScene = touch.location(in: self)
    let touchedNode = self.atPoint(positionInScene)

    //???


【问题讨论】:

使用 userData 属性。 谢谢,我让它与 userData ball.userData = NSMutableDictionary() ball.userData?.setValue(Int(ballNumber), forKey:”ballNumberKey”) // 一起工作被触动让 x = (touchedNode.userData?.value(forKey: “ballNumberKey”)) as!整数打印(x) 【参考方案1】:

要么使用childNode(withName:)找到子标签节点,要么只是更改节点名称ball.name = "String(ballNumber)"并检查您可能接触过的节点

if let touchedNode = touchedNode, touchedNode.name == correctNumber 
    //whatever

【讨论】:

谢谢,我最终使用了 .userData,所以我可以在 SKSpriteNode 中存储整数

以上是关于有没有办法在 SKSpriteNode 中分配和调用变量?的主要内容,如果未能解决你的问题,请参考以下文章

关于在函数中分配和释放对象的问题

在复制构造函数中分配和初始化

在文本字段中分配和辞职第一响应者

如何在 C 中分配和释放对齐的内存

使用宏在 excel 中分配和检索 excel cellValues

有没有办法从代码中获取放置在场景编辑器中的 SKSpriteNode 的当前位置? - 精灵套件