gpt4 book ai didi

ios - 在场景之间传递时加载动画

转载 作者:可可西里 更新时间:2023-11-01 02:20:22 25 4
gpt4 key购买 nike

我正在使用 Swift 制作一款 iOS 游戏。在菜单上(Menu 是一个 SKScene),我有一个启动游戏的按钮,我们称它为“开始按钮”。当我点击开始按钮时,应用程序卡住并加载游戏(游戏是一个 SKScene),然后过渡动画运行并开始游戏。但是我不想卡住应用程序,而是希望在应用程序加载游戏玩法时有一个旋转的加载圆圈。我怎样才能做到这一点?有什么不明白的地方问我...

func loadingScreen(scene:SKScene) {
var loadingSprite = SKSpriteNode(imageNamed: "loading.png")
loadingSprite.size = CGSize(width: 100, height: 100)
loadingSprite.position = CGPoint(x: self.size.width/2, y: self.size.height/2)
loadingSprite.zPosition = 10
self.addChild(loadingSprite)
loadingSprite.runAction(SKAction.repeatActionForever(SKAction.rotateByAngle(3, duration: 0.5)))
let qualityOfServiceClass = QOS_CLASS_BACKGROUND
let backgroundQueue = dispatch_get_global_queue(qualityOfServiceClass, 0)
dispatch_async(backgroundQueue, {
dispatch_async(dispatch_get_main_queue(), { () -> Void in
self.view!.presentScene(scene, transition: SKTransition.fadeWithDuration(1.0))
})

})
}

它是secondScene的初始化器;

convenience init (size:CGSize,mode:String) {
self.init(size:size)
self.gameMode = mode
loadItems() //loads my custom objects
printSlider() // printing sprites depending to my objects
}

最佳答案

以下是我在游戏中加载场景的方式。我将一个节点添加到菜单场景并对其应用一个 Action 以使其保持动画效果。然后我在后台线程上初始化我的场景,这样主线程就不会被阻塞(记住主线程处理视觉渲染)。最后,场景加载完成后,我将场景返回到主线程。下面是它的代码。

let loadingSprite = YourLoadingSprite()
self.sceneView.scene!.addChild(loadingSprite)

let qualityOfServiceClass = QOS_CLASS_BACKGROUND
let backgroundQueue = dispatch_get_global_queue(qualityOfServiceClass, 0)
dispatch_async(backgroundQueue, {
self.gameScene = GameScene()
dispatch_async(dispatch_get_main_queue(), { () -> Void in
self.sceneView.presentScene(self.gameScene, transition: SKTransition.fadeWithDuration(1.0))
})

})

更新
在您的代码中,您没有在后台线程上初始化场景。调用此方法时,您的场景已经初始化。您需要在此方法中初始化场景,但将其分派(dispatch)到后台线程。在下面的代码中,我添加了一条注释,说明您应该在哪里初始化场景。

func loadingScreen() {
var loadingSprite = SKSpriteNode(imageNamed: "loading.png")
loadingSprite.size = CGSize(width: 100, height: 100)
loadingSprite.position = CGPoint(x: self.size.width/2, y: self.size.height/2)
loadingSprite.zPosition = 10
self.addChild(loadingSprite)
loadingSprite.runAction(SKAction.repeatActionForever(SKAction.rotateByAngle(3, duration: 0.5)))
let qualityOfServiceClass = QOS_CLASS_BACKGROUND
let backgroundQueue = dispatch_get_global_queue(qualityOfServiceClass, 0)
dispatch_async(backgroundQueue, {
//Initialize the scene here!
let scene = YourScene()
dispatch_async(dispatch_get_main_queue(), { () -> Void in
self.view!.presentScene(scene, transition: SKTransition.fadeWithDuration(1.0))
})

})
}

关于ios - 在场景之间传递时加载动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31090868/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com