dme*_*err 2 xcode uikit ios sprite-kit swift
我正在SpriteKit中制作一个简单的游戏,我正在尝试使用UIKit制作一个主菜单.我为主菜单创建了一个View控制器,为游戏创建了一个单独的控制器.每当按下播放按钮时,它都会切换到游戏视图控制器,然后呈现第一个场景.然而,每当它试图将游戏视图控制器的UIView转换为SKView以及能够呈现场景时,某些东西都会失败,并且崩溃报告是汇编,我不知道如何调试.我相信它实例化游戏视图控制器两次,因为当我在viewWillLayoutSubviews()方法中放置println()时,它会打印两次.关于这一点的另一篇文章说,在演员阵容期间类型已经是SKView,导致它失败,在这种情况下,这可能意味着当它触发两次时,它会施放一次,然后再次尝试施放并失败.提前致谢!
这是快速的代码
import UIKit
import SpriteKit
class MenuViewController: UIViewController {
let background = UIImageView(image: UIImage(named: "background.png"))
let titleImg = UIImageView(image: UIImage(named: "title.png"))
override func viewDidLoad() {
background.frame = self.view.frame
titleImg.frame = CGRectMake(0, 0, self.view.frame.width, 100)
self.view.addSubview(background)
self.view.addSubview(titleImg)
let bp = ButtonPositions(controller: self)
let play = button(bp.playY, named: "playButton.png")
let leader = button(bp.leaderY, named: "leaderButton.png")
let rate = button(bp.rateY, named: "rateButton.png")
play.addTarget(self, action: "playPressed", forControlEvents: UIControlEvents.TouchDown)
leader.addTarget(self, action: "leaderPressed", forControlEvents: UIControlEvents.TouchDown)
rate.addTarget(self, action: "ratePressed", forControlEvents: UIControlEvents.TouchDown)
self.view.addSubview(rate)
self.view.addSubview(leader)
self.view.addSubview(play)
}
func button(y:CGFloat, named name:String!) -> UIButton {
let bp = ButtonPositions(controller: self)
let img = UIImage(named: name)
let b = UIButton(frame: CGRectMake(bp.x, y, self.view.frame.width / 1.5, img.size.height))
b.setImage(img, forState: UIControlState.Normal)
return b
}
func playPressed() {
println("playPressed") //only prints once
changeVC()
}
func changeVC() {
self.presentViewController(GameViewController(), animated: true, completion: nil) //maybe initializing the GameViewController twice for some reason?
}
func leaderPressed() {
}
func ratePressed() {
}
func center() -> CGPoint {
return CGPoint(x: CGRectGetMidX(self.view.frame), y: CGRectGetMidY(self.view.frame))
}
override func prefersStatusBarHidden() -> Bool {
return true
}
}
class GameViewController: UIViewController {
override func viewWillLayoutSubviews() {
super.viewWillLayoutSubviews()
//prepareGame()
println("test") //this prints twice, even through the button press event is only triggered once
}
func prepareGame() {
let skView = self.view as SKView //crashes here when called
let scene = GameScene(size: self.view.bounds.size)
skView.showsFPS = true
skView.showsNodeCount = true
skView.ignoresSiblingOrder = true
scene.scaleMode = .AspectFill
skView.presentScene(scene)
}
override func shouldAutorotate() -> Bool {
return true
}
override func supportedInterfaceOrientations() -> Int {
if UIDevice.currentDevice().userInterfaceIdiom == .Phone {
return Int(UIInterfaceOrientationMask.AllButUpsideDown.toRaw())
} else {
return Int(UIInterfaceOrientationMask.All.toRaw())
}
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
override func prefersStatusBarHidden() -> Bool {
return false
}
}
Run Code Online (Sandbox Code Playgroud)
我遇到过同样的问题.我使用iOS的默认Swift Game项目创建了我的项目,默认情况下为SceneKit创建项目,因为我想使用SpriteKit并尝试将我的新场景投射到SKView,它在我试图投射的线上生成了EXC_BAD_ACCESS.为了解决我的问题,我不得不将主故事板中的类更改为SKView,因为它默认为SCNView.
我要遵循的步骤来修复:
这样做之后问题就消失了.
| 归档时间: |
|
| 查看次数: |
3573 次 |
| 最近记录: |