SpriteKit游戏的菜单系统

时间:2016-04-30 17:16:02

标签: swift menu sprite-kit sprite

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

我正在寻找的原因是我是初学者并且正在构建我的第一个基本游戏。我已经使用了一些这些指南,但似乎都没有给出适当的指导。

认为为所有初学者创建一个帖子最好开始。我尝试了一些实际的代码,但它没有成功(虽然我可以发帖,如果有人有兴趣看到什么不该做的话,会发生很多错误。)

无论如何,这里没有任何事情提前谢谢所有,让我们看看我们如何完成它!

1 个答案:

答案 0 :(得分: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)
    }
}

}

在这种情况下,我对标题和按钮进行了硬编码,但如果需要,可以添加自己的图像。这只是创建菜单的一种简单方法,但还有很多其他方法可以做到这一点。当你走的时候,无论如何你都可以建立自己的。

祝你好运。