gpt4 book ai didi

Swift SpriteKit PresentScene 错误

转载 作者:行者123 更新时间:2023-11-30 13:22:29 25 4
gpt4 key购买 nike

我正在尝试制作一个小行星类型的游戏,每次小行星与玩家碰撞时,最终场景都会加载良好,当我尝试重新启动它时,就像代码卡在循环调用最终场景的碰撞函数一样。这是碰撞函数

func didBeginContact(contact: SKPhysicsContact) {
print("5")
//Creating a variable that holds which two items collide
let contactMask = contact.bodyA.categoryBitMask | contact.bodyB.categoryBitMask
//Creating a switch case statement
//This will run a different case depending on whitch two objects collide
switch(contactMask) {
//If the satellite and the asteroid collide do this
case bitMask.satellite.rawValue | bitMask.asteroid.rawValue:
//removing the satellite
let secondNode = contact.bodyB.node
secondNode?.physicsBody?.allowsRotation = true
let firstNode = contact.bodyA.node
firstNode?.removeFromParent()
//Stopping the mission timer
removeActionForKey("missionDurationTime")
self.removeAllChildren()
print("6")
self.view?.presentScene(EndScene())
print("7")
default:
return
}
}

这是从结束场景返回到游戏场景的函数

func Restart(){
print("hello")
RestartBtn.removeFromSuperview()
speach.removeFromSuperview()
score.removeFromSuperview()
gameOver.removeFromSuperview()
self.view?.presentScene(GameScene())

}

在我点击重新启动按钮后,EndScene 中的所有标签都像应有的那样消失,但屏幕一片空白,控制台只打印“5” 6 7在最终场景中的标签返回之前,次数太多了。我很困惑并且有点难以理解。非常感谢任何帮助!

更新:

我将重启按钮中的代码更改为这样

print("hello")
RestartBtn.removeFromSuperview()
speach.removeFromSuperview()
score.removeFromSuperview()
gameOver.removeFromSuperview()
let scene = GameScene(size: self.view!.bounds.size)
scene.backgroundColor = SKColor(red: 1, green: 1, blue: 1, alpha: 1)
scene.scaleMode = .AspectFill
scene.backgroundColor = UIColor.whiteColor()
let transition = SKTransition.pushWithDirection(SKTransitionDirection.Left, duration:0.5)
self.scene?.view?.presentScene(scene, transition: transition)

现在游戏场景已加载,一切都如其应有,只是一切都放大了五倍。它应该是这样的: What it should look like

这就是它的样子 What it does look like

最佳答案

在重新启动代码时,您将使用 view.bounds 的大小初始化 GameScene。

如果您没有更改 GameViewController 代码,则默认情况下您将使用 GameScene.sks 文件作为引用(视觉级别编辑器),默认场景大小为 1024*768,缩放模式为 .AspectFill。

简而言之,在您的重启功能中尝试一下

 if let scene =  GameScene(fileNamed: "GameScene") { // fileNamed is the GameScene.sks file
scene.backgroundColor = SKColor(red: 1, green: 1, blue: 1, alpha: 1)
....


}

或者

 let scene = GameScene(size: CGSize(width: 1024, height: 768)
scene.backgroundColor ....

关于Swift SpriteKit PresentScene 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37626427/

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