我的GVC中有五个iPad场景和5个iPhone场景,我可以调用欢迎场景和Hud场景没有问题,但我无法复制其他场景的相同调用。我不知道它是否是大括号,但我似乎不能将其他iPad场景称为默认为iPhone场景。(相信我,当HUD出现时,我非常兴奋。有人可以就我的代码结构提供一些建议吗?请。。。。
import SpriteKit
class GameViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
if (UIDevice.currentDevice().userInterfaceIdiom == .Phone) {
if let scene = WelcomeScene(fileNamed:"WelcomeScene") {
let skView = self.view as! SKView
skView.showsFPS = GlobalData.Constant.DEV.DEBUG
skView.showsNodeCount = GlobalData.Constant.DEV.DEBUG
skView.ignoresSiblingOrder = true
scene.scaleMode = .AspectFill
skView.presentScene(scene)
}
} else {
if let scene = WelcomeScenePad(fileNamed: "WelcomeScenePad") {
let skView = self.view as! SKView
skView.showsFPS = GlobalData.Constant.DEV.DEBUG
skView.showsNodeCount = GlobalData.Constant.DEV.DEBUG
skView.ignoresSiblingOrder = true
scene.scaleMode = .AspectFill
skView.presentScene(scene)
if let scene = HudScenePad(fileNamed: "HudScenePad") {
let skView = self.view as! SKView
skView.showsNodeCount = GlobalData.Constant.DEV.DEBUG
skView.ignoresSiblingOrder = true
scene.scaleMode = .AspectFill
skView.presentScene(scene)
}
} else if let scene = WelcomeScene(fileNamed:"WelcomeScene") {
let skView = self.view as! SKView
skView.showsFPS = GlobalData.Constant.DEV.DEBUG
skView.showsNodeCount = GlobalData.Constant.DEV.DEBUG
skView.ignoresSiblingOrder = true
scene.scaleMode = .AspectFill
skView.presentScene(scene)
}
}
}
override func prefersStatusBarHidden() -> Bool {
return false
}
override func shouldAutorotate() -> Bool {
return true
}
override func supportedInterfaceOrientations() -> UIInterfaceOrientationMask {
if UIDevice.currentDevice().userInterfaceIdiom == .Phone {
return .AllButUpsideDown
} else {
return .All
}
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Release any cached data, images, etc that aren't in use.
}
}
这段代码让我知道游戏场景要到正确的sks文件,并在编辑器中打印值,以验证,这是在我的gameOver函数中。
if (UIDevice.currentDevice().userInterfaceIdiom == .Pad ){
if let _ = SceneTypePad(rawValue: fullSKSNameToLoad + String("Pad")) {
fullSKSNameToLoad = "fileNamed" + "Pad"
goToScenePad(SceneTypePad.DebateScene1Pad)
print(("Went to DebateScenePad"))
_ = SKTransition.fadeWithDuration(3)
_ = DebateScene1Pad()
}
} else if (UIDevice.currentDevice().userInterfaceIdiom == .Phone ){
goToScene(SceneType.DebateScene1)
(print("Went to DebateScenePhone"))
_ = SKTransition.fadeWithDuration(3)
_ = DebateScene1()
}
三秒钟太长了,不能等待... :)
我需要创建一个新的静态变量来调用我的 GlobalData/Base Scene 文件中的 SKs pad 场景。菜鸟错误。当复制新文件的代码时,明智的词会仔细检查变量,当复制 swift 文件时。此外,让头脑休息一下是件好事,个人在编码 14 小时后无法保持注意力和敏锐......散步,用新鲜的头脑整理它。截止日期在这项业务中至关重要,但有时压力会带来可以轻松解决的愚蠢决定。
static var previousScenePad:SceneTypePad?
static var nextScenePad:SceneTypePad?
if (UIDevice.currentDevice().userInterfaceIdiom == .Phone) {
if (UIDevice.currentDevice().userInterfaceIdiom == .Pad ){
if let _ = SceneTypePad(rawValue: fullSKSNameToLoad + String("Pad")) {
fullSKSNameToLoad = "fileNamed" + "Pad"
}
} else if (UIDevice.currentDevice().userInterfaceIdiom == .Phone ){
}
在调用特定 SKS 文件时在 GVC 中工作。显然,它基于使用基类中定义的正确文件名"来呈现正确的视图,是的,我知道,有更好的方法来使用一个SKS文件,并使用相机节点来调整视图。在内容方面,拥有更多空间,它有机会以更多像素和更多空间创造不同的体验。资产同样重要,因为一开始我为每个设备调用了错误的资产,我决定硬编码,在不损失分辨率的情况下为我的外观设置比例因子。最终结果将是一个跨平台工作的通用应用程序。如果优化正确,即使我在应用程序捆绑包中添加了 5 个新场景,我也能够将 140mb 的应用程序压缩到 76mb。检查背景音乐、音效和 PNG 文件。将发射器限制为看起来不错的效果。您可以随时返回并在下一次更新中找到更干净的方法!!