2016-04-30 96 views
-1

我已經看過SpriteKit中幾個不同的帖子周邊菜單系統,沒有真正關注如何從開始到結束(基本播放按鈕開始遊戲,背景,然後共享圖標) 。SpriteKit中的遊戲菜單系統

我在尋找的原因是我是初學者,並且正在構建我的第一個基礎遊戲。我已經使用了一些這些指南,但似乎沒有一個適當的步驟。

認爲這將是一件好事,爲所有初學者創建一個開始。我嘗試了一些實際的代碼,但它沒有成功(很多錯誤,儘管我可以發佈,如果任何人有興趣看看不該做什麼)。

無論如何,這裏一無所有在此先感謝所有人,讓我們看看我們如何完成它!

回答

1

好吧,我相信這是一個很好的問題,在這裏設置一些答案並不是一個壞主意。我在這個非常簡單的菜單中設置了一個帶有標題和三個按鈕的開始菜單。稍後可以修改爲期望的結果。首先通過在左側的項目窗格中添加文件來爲開始菜單創建一個新文件。然後創建一個spritekitScene也具有相同的名稱(startMenu或任何你想命名它),然後對設置做相同的操作,也可以在開始菜單中添加學分或任何其他項目。

下一步是將遊戲的切入點從遊戲場景切換到視圖控制器swift中的開始菜單。改變遊戲場景爲你在這一行if let scene = GameScene(fileNamed:"GameScene")if let scene = StartMenu(fileNamed:"StartMenu")之間命名你的菜單,這將推動開始菜單而不是遊戲場景。去開始菜單並添加下面的代碼來創建一個標題和按鈕到視圖。我創建了按鈕和文本,併爲每個按鈕添加了單獨的功能,以便於後續處理,然後在最後添加選擇器的功能,以便在按下按鈕時推動新場景。你也可以爲這些場景添加一個返回按鈕,或者做任何你想要的東西。所以這裏是完整的開始菜單代碼:

import Foundation 
import SpriteKit 

class StartMenu : SKScene { 

var btnPlay : UIButton! 
var btnSettings : UIButton! 
var btnCredits : UIButton! 
var gameTitle : UILabel! 

override func didMoveToView(view: SKView) { 
    // self.backgroundColor = UIColor.orangeColor() 

    setUpTitleText() 
    setupButtonPlay() 
    setupButtonSettings() 
    setupButtonCredits() 
} 

func setUpTitleText(){ 

    gameTitle = UILabel(frame: CGRect(x: 0, y: 0, width: view!.frame.width, height: 300)) 
    gameTitle.textColor = UIColor.blackColor() 
    gameTitle.font = UIFont(name: "Futura", size: 50) 
    gameTitle.textAlignment = NSTextAlignment.Center 
    gameTitle.text = "Game Title" 
    //gameTitle.backgroundColor = UIColor.whiteColor() 

    self.view?.addSubview(gameTitle) 
} 

func setupButtonPlay(){ 

    btnPlay = UIButton(frame: CGRect(x: 100, y: 100, width: 200, height: 100)) 
    btnPlay.center = CGPoint(x: view!.frame.size.width/2, y: 250) 
    btnPlay.titleLabel?.font = UIFont(name: "Futura", size: 25) 
    btnPlay.setTitle("Play", forState: UIControlState.Normal) 
    btnPlay.setTitleColor(UIColor.blueColor(), forState: UIControlState.Normal) 
    //btnPlay.backgroundColor = UIColor.grayColor() 
    btnPlay.addTarget(self, action: #selector(StartMenu.playTheGame), forControlEvents: UIControlEvents.TouchUpInside) 
    self.view?.addSubview(btnPlay) 

} 

func setupButtonSettings(){ 

    btnSettings = UIButton(frame: CGRect(x: 100, y: 100, width: 200, height: 100)) 
    btnSettings.center = CGPoint(x: view!.frame.size.width/2, y: 350) 
    btnSettings.titleLabel?.font = UIFont(name: "Futura", size: 25) 
    btnSettings.setTitle("Settings", forState: UIControlState.Normal) 
    btnSettings.setTitleColor(UIColor.blueColor(), forState: UIControlState.Normal) 
    //btnSettings.backgroundColor = UIColor.grayColor() 
    btnSettings.addTarget(self, action: #selector(StartMenu.pressTheSettings), forControlEvents: UIControlEvents.TouchUpInside) 
    self.view?.addSubview(btnSettings) 
} 

func setupButtonCredits(){ 

    btnCredits = UIButton(frame: CGRect(x: 100, y: 100, width: 200, height: 100)) 
    btnCredits.center = CGPoint(x: view!.frame.size.width/2, y: 450) 
    btnCredits.titleLabel?.font = UIFont(name: "Futura", size: 25) 
    btnCredits.setTitle("Credits", forState: UIControlState.Normal) 
    btnCredits.setTitleColor(UIColor.blueColor(), forState: UIControlState.Normal) 
    //btnCredits.backgroundColor = UIColor.grayColor() 
    btnCredits.addTarget(self, action: #selector(StartMenu.pressTheCredits), forControlEvents: UIControlEvents.TouchUpInside) 
    self.view?.addSubview(btnCredits) 
} 

func playTheGame(){ 
    self.view?.presentScene(GameScene(), transition: SKTransition.crossFadeWithDuration(1.0)) 
    btnPlay.removeFromSuperview() 
    gameTitle.removeFromSuperview() 
    btnCredits.removeFromSuperview() 
    btnSettings.removeFromSuperview() 

    if let scene = GameScene(fileNamed: "GameScene"){ 
     let skView = self.view! as SKView 

     skView.ignoresSiblingOrder = true 

     scene.scaleMode = .AspectFill 
     skView.presentScene(scene) 
    } 
} 

func pressTheSettings(){ 
    self.view?.presentScene(TheSettings(), transition: SKTransition.crossFadeWithDuration(1.0)) 
    btnPlay.removeFromSuperview() 
    gameTitle.removeFromSuperview() 
    btnCredits.removeFromSuperview() 
    btnSettings.removeFromSuperview() 

    if let scene = TheSettings(fileNamed: "TheSettings"){ 
     let skView = self.view! as SKView 

     skView.ignoresSiblingOrder = true 

     scene.scaleMode = .AspectFill 
     skView.presentScene(scene) 
    } 
} 

func pressTheCredits(){ 
    self.view?.presentScene(TheCredits(), transition: SKTransition.crossFadeWithDuration(1.0)) 
    btnPlay.removeFromSuperview() 
    gameTitle.removeFromSuperview() 
    btnCredits.removeFromSuperview() 
    btnSettings.removeFromSuperview() 

    if let scene = TheCredits(fileNamed: "TheCredits"){ 
     let skView = self.view! as SKView 

     skView.ignoresSiblingOrder = true 

     scene.scaleMode = .AspectFill 
     skView.presentScene(scene) 
    } 
} 

} 

在這種情況下我已經硬編碼的標題和按鈕,但如果你願意,你可以添加自己的圖像。這只是創建菜單的一種簡單方法,但還有很多其他方法可以實現此目的。隨着你的前進,你可以建立自己的反正你喜歡的。

祝你好運。