美文网首页
2018-02-26 游戏中状态的切换

2018-02-26 游戏中状态的切换

作者: Sesshomaru | 来源:发表于2018-02-26 22:12 被阅读77次

1. 在Types.swift中通过枚举定义初始化、开始、游戏中、胜利、失败、重新加载及暂停

enum GameState:Int {
    
    case initial = 0, start, play, win, lose, reload, pause
    
}

2. 本教程中的几种状态相对简单,每种状态都会包含一些label,所以我们在切换状态时,只需先将原状态的label移除,再添加新的label即可,移除原状态的label及添加新状态的label方法如下(移除的方法就是直接通过text查找到相应的对象并予以移除):

    //移除对象
    private func remove(message:String) {
        
        childNode(withName: message)?.removeFromParent()
        
    }
    
    //移除原状态的label
    private func clearUI(gameState:GameState){
        
        switch gameState {
        case .start:
            remove(message: HUDMessages.tapToStart)
            
        case .win:
            remove(message: HUDMessages.win)
            remove(message: HUDMessages.nextLevel)
        case .lose:
            remove(message: HUDMessages.lose)
            remove(message: HUDMessages.playAgain)
        default:
            break
        }
    }
    
    //添加新状态的label
    private func updateUI(gameState:GameState) {
        
        switch gameState {
            
            
        case .start:
            
            add(message: HUDMessages.tapToStart, position: .zero)
            
        case .win:
            add(message: HUDMessages.win, position: .zero)
            add(message: HUDMessages.nextLevel,
                position: CGPoint(x: 0, y: -100))
            
        case .lose:
            add(message: HUDMessages.lose, position: .zero)
            add(message: HUDMessages.playAgain, position: CGPoint(x: 0, y: -100))
            
            
            
        default:
            break
        }
        
        
    }

3. 创建updateGameState的方法切换游戏状态

    func updateGameState(from:GameState, to: GameState) {
        
        clearUI(gameState: from)
        
        updateUI(gameState: to)
        
    }

4. 在GameScene中新建成员变量gameState并初始化为.initial状态,然后建立监听机制:

    var gameState:GameState = .initial {
        
        didSet {
            hud.updateGameState(from: oldValue, to: gameState)
        }
        
    }

didSet是在属性值改变以后执行方法,willSet是在属性值改变之前执行方法

5. 在游戏开始后,游戏状态为start,所以需要在didMove中将gameState设置为.start

gameState = .start

6. 本教程中需要完成以下需求:通过点击屏幕,完成.start ->.play及.lose->.start的切换。倒计时结束后自动完成.play->.lose的切换。

通过点击屏幕,完成.start ->.play及.lose->.start的切换。

    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
        guard let touch  = touches.first else {
            return
        }
        
        switch gameState {
        //start状态时,点击屏幕,1.游戏状态切换为play 2. isPaused状态变为不暂停,即false  3. startTime初始化为nil 4. elapsedTime初始化为0
        case .start:
            
            gameState = .play
            
            isPaused = false
            
            startTime = nil
            
            elapsedTime = 0
         
        //play状态时,点击屏幕,player可以移动
        case .play:
            
            player.move(target: touch.location(in: self))
        
        //lose状态时,点击屏幕,切换为start状态
        case .lose:
            
            gameState = .start

            
        default:
            break
        }
        

    }

倒计时结束后自动完成.play->.lose的切换。

首先我们需要检测什么时候状态满足lose的条件,即倒计时为0时
满足条件后将gameSate = .lose即可

    func checkEndGame() {
//        if bugNode.children.count == 0 {
//            gameState = .win
//        }
        if timeLimit - elapsedTime <= 0 {
            gameState = .lose
        }
    }

因为检测是实时的,所以将checkEndGame()添加到update方法中。

相关文章

  • 2018-02-26 游戏中状态的切换

    1. 在Types.swift中通过枚举定义初始化、开始、游戏中、胜利、失败、重新加载及暂停 2. 本教程中的几种...

  • Android输入法IMMS服务启动流程(5)(onUnlock

    目录 user状态切换 手机重启时,用户空间状态切换顺序: 用户的各个状态切换实在UserController完成...

  • 状态切换

    最近任务有些多,经常需要在多任务之间切换,工作环境也多次切换,整个人的效率严重下滑。 这个局面该怎么应对呢? 多任...

  • Sonoff Tasmota 使用指南

    一、按钮功能 1次短按:切换开关状态。2次短按:切换开关状态。对于Sonoff Dual,切换开关2状态。3次短按...

  • Unity场景切换

    场景切换在游戏中很常见。 切换其他场景比如点击start按钮后开始游戏。代码如下: 这里的场景名start_gam...

  • 设计模式小结(UNITY应用)

    状态模式 某状态下对要切换到的状态是确定的 在同一时间只能有一个状态 应用:场景切换,AI状态切换,角色在线状态,...

  • 进程调度

    需要调度的四种情况:1.进程从运行状态切换到等待状态2.进程从运行状态切换到就绪状态3.从等待状态切换到就绪状态4...

  • 切换状态@老家

    叮咚!各行各业,大店小店都已经正常上班啦!就连朋友圈都不知道见了多少张“开工大吉”的旗帜了!而我,一枚回到农村的妹...

  • 减少状态切换

    <暗时间>一书中讲到工作和生活当中切换状态消耗我们大量的时间。 自己才工作和学习当中,容易被琐碎的事情吸引和打断。...

  • 学会切换状态

    星期四一天的工作不是很忙,晚上我约好了老婆孩子,带他们出去株洲的王府井附近玩。 忙完了一天的工作,我开...

网友评论

      本文标题:2018-02-26 游戏中状态的切换

      本文链接:https://www.haomeiwen.com/subject/ztjuxftx.html