SKScene和Swift文件没有链接

时间:2016-06-11 17:24:45

标签: xcode sprite-kit skscene

在我的xcode项目中,我正试图从一个SKScene过渡到另一个。触发转换的原因是触摸SKLabelNode。所有这一切都正常。但是在场景改变后,我的类中没有任何代码控制着" StartScence.sks"作品。好像我的" StartScene.swift"和我的" StartScene.sks"没有联系。

这是我的GameScene中的代码,

import SpriteKit

class GameScene: SKScene {

var isTouched: Bool = false
var booleanTouched: Bool!
let ns = SKScene(fileNamed: "StartScene")
let crosswf = SKTransition.crossFadeWithDuration(2)


override func didMoveToView(view: SKView) {


    let backgroundimage = SKSpriteNode(imageNamed: "ipbg")
    backgroundimage.size = CGSize(width: self.frame.size.width, height: self.frame.size.height)
    backgroundimage.position = CGPoint(x: self.frame.size.width / 2, y: self.frame.size.height / 2)
    addChild(backgroundimage)

    let playButton = SKLabelNode(fontNamed: "")
    playButton.name = "play"
    playButton.position = CGPoint(x: self.frame.size.width / 2, y: self.frame.size.height / 2 + 100)
    playButton.text = "Play"

    let wait = SKAction.waitForDuration(2)
    let run = SKAction.runBlock({


        let randomNumber = Int(arc4random_uniform(UInt32(4)))

        switch(randomNumber){

        case (0):

            playButton.fontColor = UIColor.blueColor()

        case 1:

            playButton.fontColor = UIColor.yellowColor()

        case 2:

            playButton.fontColor = UIColor.purpleColor()

        case 3:

            playButton.fontColor = UIColor.orangeColor()

        default: print("default")


        }

    })

    addChild(playButton)
    var repeatActionForever = SKAction.repeatActionForever(SKAction.sequence([wait, run]))
    runAction(repeatActionForever)
    backgroundimage.zPosition = 1
    playButton.zPosition = 2



}

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

    let touch = touches.first! as UITouch
    let touchLocation = touch.locationInNode(self)
    let touchedNode = nodeAtPoint(touchLocation)


    if (touchedNode.name == "play"){

        scene!.view?.presentScene(ns!, transition: crosswf)

    }else{


    }


}

override func update(currentTime: CFTimeInterval) {
    /* Called before each frame is rendered */
}

}

这是我的&#34; StartScene.swift&#34;那不是控制&#34; StartScene.sks&#34;正常。

import SpriteKit

class StartScene: SKScene {


override func didMoveToView(view: SKView) {


    print("Scene Loaded")

}

}

1 个答案:

答案 0 :(得分:2)

有两件事需要注意。

  1. 在您的代码中,您当前正在加载.SKS文件,如下所示

    let ns = SKScene(fileNamed: "StartScene")
    
  2. 您的新场景将加载,因为所有SKS文件都属于SKScene类。 但是,它只会使用该类中的代码。

    如果您希望使用类StartScene(SKScene的子类)中的代码加载它。将行更改为此

        let ns = StartScene(fileNamed: "StartScene")
    
    1. 我们还可以使SKS文件具有自定义类,而不是默认的SKScene。因此,当它加载时,它使用自定义类。
    2. 在Xcode中打开SKS文件,以便为场景提供自定义类。在场景编辑器中并没有选择任何内容。单击实用程序区域,切换到自定义类检查器,这是右侧的最后一个选项卡。

      给它一个自定义的StartScene类。

      它应该有用。