如何检测哪个场景?(swift/spritekit/xcode)
我在gameviewcontroller中使用以下代码作为背景:如何检测哪个场景?(swift/spritekit/xcode),xcode,swift,background,scene,Xcode,Swift,Background,Scene,我在gameviewcontroller中使用以下代码作为背景: let yourImage = UIImage(named: welkeLevel) let imageview = UIImageView(image: yourImage) self.view?.addSubview(imageview) 但我有一个开始(菜单)的场景,我不想要这个背景,仍然出现 如何检测我是哪一个场景(游戏场景/菜单场景等) 或者还有其他方法吗?SKScene是SKNode的子类。您
let yourImage = UIImage(named: welkeLevel)
let imageview = UIImageView(image: yourImage)
self.view?.addSubview(imageview)
但我有一个开始(菜单)的场景,我不想要这个背景,仍然出现
如何检测我是哪一个场景(游戏场景/菜单场景等)
或者还有其他方法吗?
SKScene
是SKNode
的子类。您可以使用name属性来执行此操作。只需将游戏场景
或Menuscene
的名称设置为'game'
或'menu'
,如下所示:
scene.name = "game"
并检查属性,如下所示:
if self.name == "game"{
//Do something.
println("game")
} else if self.name == "menu
//Do something else.
println("menu")
}
我是将此代码放在viewcontroller还是游戏场景中?谢谢,因为它说gameviewcontroller在这行代码中没有名为“name”的成员:if self.name==“game”{第一个块应该在视图控制器中,第二个块应该在实际游戏场景中。如果需要在视图控制器中使用第二个块,只需将self替换为对要检查的场景的引用。我想在我的视图控制器中使用第二个块,但我不知道将self替换为对要检查的场景的引用是什么意思要检查。我要检查场景是否为一个游戏场景,但如果我将self.name更改为GameSecene.name,则会出现错误
I have worked out the same issue with a replay button. I have to identify which scene the user is in and reload the same when user clicks replay button.
1) Add a extension function to detect current game level
extension SKScene {
static func sceneWithClassNamed(className: String, fileNamed fileName: String) -> SKScene? {
if let SceneClass = NSClassFromString("JumperCrab.\(className)") as? SKScene.Type,
let scene = SceneClass(fileNamed: fileName) {
return scene
}
return nil
}
func replayCurrentScene(currentLevelName: String,currentGameSceneIndex:Int)
{
GameViewController().getReplayCurrentSceneDetailsToVC(currentLevelName, currentGameSceneIndex: currentGameSceneIndex)
}
}
2) Call the above extension method in every game scene.
override func didMoveToView(view: SKView) {
self.replayCurrentScene( "Round 1", currentGameSceneIndex: 0)
}
3) Set up a similar method at the View Controller.
func getReplayCurrentSceneDetailsToVC(currentLevelName: String,currentGameSceneIndex:Int)
{
NSUserDefaults.standardUserDefaults().setInteger(currentGameSceneIndex, forKey: "LevelInt")
NSUserDefaults.standardUserDefaults().synchronize()
NSUserDefaults.standardUserDefaults().setObject(currentLevelName, forKey: "LevelName")
NSUserDefaults.standardUserDefaults().synchronize()
}
4) Create variables
//GAME LEVEL
var gameLevelSceneNameArray = NSArray()
var currentGameSceneAtVC:String?
var currentGameSceneIndexAtVC:Int?
5) Make my level list array
override func viewDidLoad() {
super.viewDidLoad()
//Game Scenes
gameLevelSceneNameArray = ["GameScene","SecondRound","ThirdRound", "FourthRound","FifthRound","SixthRound","SeventhRound", "EighthRound","NinethRound"]
}
6) Apply on the Replay Game button .
@IBAction func replayButtonClicked(sender: AnyObject) {
currentGameSceneIndexAtVC = NSUserDefaults.standardUserDefaults().integerForKey("LevelInt")
currentGameSceneAtVC = NSUserDefaults.standardUserDefaults().objectForKey("LevelName") as? String
self.moveToSelectedGameLevel(currentGameSceneAtVC!, gameSceneName: self.gameLevelSceneNameArray[currentGameSceneIndexAtVC!] as! String)
}
7) Set up a game scene navigation too (using switch case )
func moveToSelectedGameLevel(levelNameString:String, gameSceneName:String)
{
let skView = self.view as! SKView
switch(levelNameString)
{
case "Round 1":
if let gameScene = SKScene.sceneWithClassNamed(gameSceneName, fileNamed: gameSceneName) {
skView.presentScene(gameScene)
}
case "Round 2" :
if let gameScene = SKScene.sceneWithClassNamed(gameSceneName, fileNamed: gameSceneName) {
skView.presentScene(gameScene)
}
case "Round 3":
if let gameScene = SKScene.sceneWithClassNamed(gameSceneName, fileNamed: gameSceneName) {
skView.presentScene(gameScene)
default:
print("")
}
}