SKLabel 在分配给特定元素时不显示

问题描述

(以下所有代码均在 Swift Playgrounds 中编写)

首先我添加了 3 个变量并将它们放在一个数组中

var rnaBacteriacopy1 = SKSpriteNode()
var rnaBacteriacopy2 = SKSpriteNode()
var rnaViruscopy4 = SKSpriteNode()

let rnacopies = [
rnaBacteriacopy1,rnaViruscopy4,rnaBacteriacopy2
] 

然后我将 SKTextures 分配给这些变量(每个变量的文本都相似)

rnaBacteriacopy1 = SKSpriteNode(texture: SKTexture(image:(here I inserted a PNG))
        
rnaBacteriacopy1.position = CGPoint(x: 1160,y: 325)
       
 rnaBacteriacopy1.isHidden = true 
       
 addChild(rnaBacteriacopy1)

最后使用 public override function touches began 我让它选择一个随机变量,如果选择的变量是特定变量,则显示标签

override public func touchesBegan(_ touches: Set<UITouch>,with event: UIEvent?) {
        var therandomcopy = rnacopies.randomElement()
        rnacopies.randomElement()?.isHidden = false 
if therandomcopy == rnaBacteriacopy1 {
            // Fading Label
            var tryAgainLbl = SKLabelNode(text: "Uh oh! Try again.")
            tryAgainLbl.fontSize = 70.0 
            tryAgainLbl.position = CGPoint(x: frame.midX,y: frame.midY)
            tryAgainLbl.fontColor = .white
            
            let fadein = SKAction.fadeIn(withDuration: 1)
            let remove = SKAction.removeFromParent()
            tryAgainLbl.run(SKAction.sequence([fadein,remove]))
            addChild(tryAgainLbl)
            //Hide this copy 
            rnacopies.randomElement()?.isHidden = false 
            rnacopies.randomElement()?.isHidden = true 
        }

最后我隐藏了随机元素,这样你就可以看到其他 SKTexture 并点击它。我已经尝试使 if 语句尽可能具体(putting && != to other variable other than this)。但它不起作用,有什么想法吗?

解决方法

提供节点名称,以便您可以引用它们。

您可以设置您设置位置的名称和isHidden等。

rnaBacteriaCopy1.name = "bacteria1"

请注意,您可以为 1 个以上的节点指定相同的名称,因此如果您的所有细菌节点都使用“细菌”名称是有意义的,那么您可以这样做。

您也可以为病毒提供名称:

rnaVirusCopy4.name = "virus"

现在,在您的触摸中开始替换此代码:

if therandomCopy == rnaBacteriaCopy1 {

有了这个:

if therandomCopy.name == "bacteria1" {

这意味着如果 randomCopy 节点的名称为“bacteria1”,则继续处理 if 中的标签代码。