我在界面生成器中完成了几个 SKScene,其中我在屏幕上可见的 SKScene 部分中放置了几个 Sprite
我希望一些 Sprite 只在稍后出现,所以我开始在 didMoveToView 方法的开头隐藏它们。
override func didMoveToView(view: SKView)
{
// Reading of the sprites created in the SKScene in the interface builder
BackgroundLayer = self.childNodeWithName("BackgroundLayer") as! SKSpriteNode
LettreB = self.childNodeWithName("B0") as! SKSpriteNode
LettreB.hidden = true
LettreR = self.childNodeWithName("R0") as! SKSpriteNode
LettreR.hidden = true
LettreI = self.childNodeWithName("I0") as! SKSpriteNode
LettreI.hidden = true
}
我遇到的问题是,在运行该应用程序时,我会非常短暂地看到所有 Sprite ,然后才隐藏它们。
即使我在界面生成器中将 blendfactor 设置为 1(并将 blendmode 设置为 Alpha), Sprite - 然后在界面生成器中不再可见 - 非常短暂地出现然后在运行应用程序时消失
除了将 Sprite 放在可见区域之外并在我需要它们出现时移动它们之外,有没有办法避免这种情况?我应该在调用 didMoveToView 之前将代码放在其他地方吗?
注意:这个问题只发生在直接从设备运行应用程序时,而不是当应用程序通过 Xcode 启动时,我猜是出于某些性能原因。
最佳答案
通常使用大写的属性名称被认为是一种不良态度,您应该使用 backgroundLayer 或 lettreB
这种改变可以通过不同的方式来实现(在 SKScene
初始化方法中,或者通过自定义你的 SKSpriteNode
并改变他的初始化),其中之一是在之前的 SKScene
或 UIViewController
中创建场景并调用它:
override func viewDidLoad() {
super.viewDidLoad()
print("---")
print("∙ \(NSStringFromClass(self.dynamicType))")
print("---")
let skView = self.view as! SKView
if let scene = MyScene(fileNamed:"MyScene") {
var letter = scene.childNodeWithName("LettreB") as! SKSpriteNode //for example
letter.hidden = true //for example
skView.presentScene(scene)
}
}
关于swift - 在界面生成器的 SKScene 中隐藏节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37480429/