【问题标题】:SKLabel is not showing when it's assigned to a specific elementSKLabel 在分配给特定元素时未显示
【发布时间】:2021-04-18 04:36:15
【问题描述】:

(以下所有代码均使用 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 &amp;&amp; != to other variable other than this)。但它不起作用,任何想法为什么?

【问题讨论】:

  • 标签代码单独运行时有效。因此我会在褪色标签代码中添加一个 print("this works") 。如果它从不打印,那么您就知道问题出在“therandomCopy == rnaBacteriaCopy1”。如果它确实打印,那么可能会增加“tryAgainLbl”zposition,因为它可能隐藏在其他对象后面。我不知道“therandomCopy”是什么,你是在用 == 比较 2 个 spritenodes 吗?
  • 对不起!我忘了在原始帖子中添加代码。 therandomCopy 是一个包含数组中随机元素的变量

标签: ios swift sprite-kit swift-playground sklabelnode


【解决方案1】:

给节点名称,这样你就可以引用它们了。

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

rnaBacteriaCopy1.name = "bacteria1"

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

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

rnaVirusCopy4.name = "virus"

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

if therandomCopy == rnaBacteriaCopy1 {

有了这个:

if therandomCopy.name == "bacteria1" {

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

【讨论】:

  • 这个解决方案对我来说效果不太好(不知道为什么)。我将尝试将 therandomCopy 与节点的纹理进行比较。也许这会奏效?无论如何感谢您的帮助@JohnL :)
猜你喜欢
  • 2010-12-13
  • 1970-01-01
  • 2020-03-18
  • 1970-01-01
  • 1970-01-01
  • 2016-07-24
  • 1970-01-01
  • 1970-01-01
  • 2019-02-24
相关资源
最近更新 更多