2017-06-22 73 views
1

我找不到解决这个问题,也许我没有实现它的权利。当我运行它时,我只是得到一个空白的白色屏幕。我尝试了不同的方法,我已经看到这个网站,但没有一个工作。该错误在“fatalError(”init(coder :)尚未实现“)”中突出显示。我有什么明显的缺失?我得到一个错误在“fatalError(”初始化(编码:) :)还没有实施“)”

import SpriteKit 
import GameplayKit 
import CoreMotion 

class GameScene: SKScene { 


let gameArea: CGRect 

override init(size: CGSize) { 

    let maxAspectRatio: CGFloat = 16.0/9.0 
    let playableWidth = size.height/maxAspectRatio 
    let margin = (size.width - playableWidth)/2 
    gameArea = CGRect(x: margin, y: 0, width: playableWidth, height: size.height) 


    super.init(size: size) 


} 

required init?(coder aDecoder: NSCoder) { 
    fatalError("init(coder:) has not been implemented") 
} 




var Red = SKSpriteNode(imageNamed: "red") 
var motionManager = CMMotionManager() 
var destX:CGFloat = 0.0 

override func didMove(to view: SKView) { 

    let background = SKSpriteNode(imageNamed: "stars") 
    background.size = self.size 
    background.zPosition = 0 
    //background.setScale(1) 
    background.position = CGPoint(x: 0, y: 0) 
    self.addChild(background) 




Red.setScale(0.25) 
Red.position = CGPoint(x: 0 , y: -500) 
self.addChild(Red) 
Red.zPosition = 2 




    if motionManager.isAccelerometerAvailable == true { 

     motionManager.startAccelerometerUpdates(to: OperationQueue.current!, withHandler:{ 
      data, error in 

      let currentX = self.Red.position.x 

      self.destX = currentX + CGFloat((data?.acceleration.x)! * 100) 
     }) 





if Red.position.x > gameArea.maxX{ 
Red.position.x = gameArea.maxX 
     } 
if Red.position.x < gameArea.maxX{ 
Red.position.x = gameArea.maxX 
     } 



    } 






    } 

override func update(_ currentTime: CFTimeInterval) { 

    let action = SKAction.moveTo(x: destX, duration: 1) 
    self.Red.run(action) 
} 



func firebullet(){ 

let bullet = SKSpriteNode(imageNamed: "gul") 
bullet.setScale(0.1) 
bullet.position = Red.position 
bullet.zPosition = 1 
self.addChild(bullet) 

let moveBullet = SKAction.moveTo(y: self.size.height + bullet.self.size.height, duration: 1) 
let deleteBullet = SKAction.removeFromParent() 
let Bulletsequence = SKAction.sequence([moveBullet, deleteBullet]) 
bullet.run(Bulletsequence) 




} 



override func touchesBegan(_ touches: Set<UITouch>,with event: UIEvent?) { 



firebullet() 




} 
} 
+0

的可能的复制[致命错误:初始化(编码器:)一直没有执行错误,尽管正在实施(https://开头计算器.com/questions/38966565/fatal-error-initcoder-has-not-been-implemented-errors-though-being-implement) –

+0

我该如何解决它? –

回答

0

我刚刚在Playground中测试了一些代码,它的工作正常。检查this了。

import SpriteKit 
import PlaygroundSupport 

class GameScene: SKScene { 

    let gameArea: CGRect 

    override init(size: CGSize) { 

     let maxAspectRatio: CGFloat = 16.0/9.0 
     let playableWidth = size.height/maxAspectRatio 
     let margin = (size.width - playableWidth)/2 
     gameArea = CGRect(x: margin, y: 0, width: playableWidth, height: size.height) 


     super.init(size: size) 
    } 

    required init?(coder aDecoder: NSCoder) { 
     fatalError("init(coder:) has not been implemented") 
    } 
} 


// Create the SpriteKit View 
let view = SKView(frame: CGRect(x: 0, y: 0, width: 500, height: 500)) 

// Create the scene and add it to the view 
let scene = GameScene(size: CGSize(width: 500, height: 500)) 
scene.scaleMode = SKSceneScaleMode.aspectFit 
scene.backgroundColor = .white 
view.presentScene(scene) 

// Add a red box to the scene 
let redBox = SKSpriteNode(color: SKColor.red, size: CGSize(width: 200, height: 200)) 
redBox.position = CGPoint(x: 250, y: 250) 
redBox.run(SKAction.repeatForever(SKAction.rotate(byAngle: -5, duration: 5))) 
scene.addChild(redBox) 

// Show in assistant editor 
PlaygroundPage.current.liveView = view 
PlaygroundPage.current.needsIndefiniteExecution = true 

enter image description here

+0

再次查看代码,我添加了更多,以便它不脱离上下文。 –

0
required init?(coder aDecoder: NSCoder) { 
    super.init(coder: aDecoder) 
} 

而不是

required init?(coder aDecoder: NSCoder) { 
    fatalError("init(coder:) has not been implemented") 
}