2

I cant find a fix for the problem, Perhaps Im not implementing it right. I just get a blank white screen when i run it. I have tried different methods that I've seen on this site but none of them work. The error is highlighted on "fatalError("init(coder:) has not been implemented")". is there something obvious that Im missing?

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 ()




}
}
2

2 Answers 2

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

Instead of

required init?(coder aDecoder: NSCoder) {
    fatalError("init(coder:) has not been implemented")
}
Sign up to request clarification or add additional context in comments.

Comments

0

I just tested your code in Playground with some additions and it's working fine. Check this out.

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

1 Comment

Have a look at the code again, I added more so that it is not out of context.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.