Ios SKLabel在';指定给特定元素的
(以下所有代码均在Swift操场中编写) 首先,我添加了3个变量,并将它们放入一个数组中Ios SKLabel在';指定给特定元素的,ios,swift,sprite-kit,swift-playground,sklabelnode,Ios,Swift,Sprite Kit,Swift Playground,Sklabelnode,(以下所有代码均在Swift操场中编写) 首先,我添加了3个变量,并将它们放入一个数组中 var rnaBacteriaCopy1 = SKSpriteNode() var rnaBacteriaCopy2 = SKSpriteNode() var rnaVirusCopy4 = SKSpriteNode() let rnaCopies = [ rnaBacteriaCopy1,rnaVirusCopy4,rnaBacteriaCopy2 ] 然后我将SKTextures指定给这些变量(每
var rnaBacteriaCopy1 = SKSpriteNode()
var rnaBacteriaCopy2 = SKSpriteNode()
var rnaVirusCopy4 = SKSpriteNode()
let rnaCopies = [
rnaBacteriaCopy1,rnaVirusCopy4,rnaBacteriaCopy2
]
然后我将SKTextures指定给这些变量(每个变量的文本都相似)
最后,使用public override函数
我让它选择一个随机变量,如果选择的变量是一个特定的变量,则显示标签
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
}
override public func touchsbegind(touch:Set,带有事件:UIEvent?){
var therandomCopy=rnaCopies.randomElement()
rnaCopies.randomElement()?.isHidden=false
如果随机副本==rnaBacteriaCopy1{
//褪色标签
var tryAgainLbl=SKLabelNode(文本:“哦!再试一次。”)
tryAgainLbl.fontSize=70.0
tryAgainLbl.position=CGPoint(x:frame.midX,y:frame.midY)
tryAgainLbl.fontColor=.white
让fadein=SKAction.fadein(持续时间:1)
让remove=SKAction.removeFromParent()
tryAgainLbl.run(SKAction.sequence([fadein,remove]))
addChild(tryAgainLbl)
//隐藏此副本
rnaCopies.randomElement()?.isHidden=false
rnaCopies.randomElement()?.isHidden=true
}
最后,我隐藏了随机元素,这样你就可以看到其他SKTexture并点击它。我已经试着使if语句尽可能具体化
(将&&!=放入除此之外的其他变量)
。但是它不起作用,你知道为什么吗?给出节点名称,这样你就可以引用它们了
您可以在设置位置和isHidden等的位置设置名称
rnaBacteriaCopy1.name = "bacteria1"
需要注意的是,您可以为多个节点指定相同的名称,因此如果所有细菌节点都使用“细菌”名称是有意义的,那么您可以这样做
您还可以为病毒提供一个名称:
rnaVirusCopy4.name = "virus"
现在,在您的应用程序中,开始替换此代码:
if therandomCopy == rnaBacteriaCopy1 {
为此:
if therandomCopy.name == "bacteria1" {
这意味着如果randomCopy节点的名称为“bacteria1”,则继续使用if中的标签代码。标签代码在单独运行时起作用。因此,我会在褪色标签代码中添加一个打印(“此工作”)。如果它从未打印,则您知道它是“therandomCopy==RNAbcteriacopy1”这就是问题所在。如果它确实打印,那么可能会增加“tryAgainLbl”Z的位置,因为它可能隐藏在其他对象后面。我不知道什么是“therandomCopy”是的,你是在用==?比较两个spritenodes吗?啊,对不起!我忘了在原始帖子中添加代码。therandomCopy是一个包含数组中随机元素的变量。该解决方案对我来说不太有效(不确定为什么)。我将尝试将随机复制与节点的纹理进行比较。也许这样行吗?无论如何,感谢您的帮助@JohnL:)
if therandomCopy.name == "bacteria1" {