SpriteKit 中游戏的菜单系统

Menu system for Games in SpriteKit

我查看了 SpriteKit 中几个不同的 post 周边菜单系统,并没有真正关注如何从头到尾实施(一个基本的播放按钮开始游戏,背景,然后共享图标) .

我正在寻找的原因是我是初学者并且正在构建我的第一个基本游戏。我已经使用了其中一些指南,none 似乎给出了正确的演练。

认为为所有初学者创建一个 post 会很好。我已经尝试了一些实际的代码,但没有成功(虽然我可以 post 如果有人有兴趣看看不该做什么,但我可以尝试一些错误)。

无论如何,这里没有什么提前谢谢大家,让我们看看如何完成它!

好吧,我认为这是一个很好的问题,在这里设置一些东西作为答案是个不错的主意。我在这个非常简单的菜单中设置了一个带有标题和三个按钮的开始菜单。稍后可以将其修改为所需的结果。首先通过左侧的项目窗格添加文件,为开始菜单创建一个新文件。然后创建一个 spritekitScene 也使用相同的名称(startMenu 或任何你想命名的)然后对设置和信用或任何其他你想添加到开始菜单的项目执行相同的操作。

下一步是将游戏的入口点从游戏场景更改为视图控制器中的开始菜单swift。将游戏场景更改为您在此行 if let scene = GameScene(fileNamed:"GameScene")if let scene = StartMenu(fileNamed:"StartMenu") 中命名菜单的任何名称,这将推送开始菜单而不是游戏场景。转到开始菜单并添加以下代码以在视图中创建标题和按钮。我创建了按钮和文本,并为每个按钮和文本添加了单独的功能,以便于后续操作,然后在最后为选择器添加功能,这样当按下按钮时,新场景就会被推送。您还可以在这些场景中添加一个 return 按钮或执行任何您想要的操作。所以这是完整的开始菜单代码:

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

}

在这种情况下,我对标题和按钮进行了硬编码,但您可以根据需要添加自己的图像。这只是创建菜单的一种简单方法,但还有许多其他方法可以做到这一点。随着您的前进,您可以随心所欲地构建自己的。

祝你好运。