[GameplayKit] iOS 게임 어플리케이션에서의 State 모드 실천 Part_삼

저번 기사까지.


[GameplayKit] iOS 게임 어플리케이션에서의 State 모드 실천 Part_이급수기를 설치하여 얻을 수 있는 모든 상태의 공통된 기능을 정의한 DispenserState류.

이 문장에 관하여


본고는 상태와 상태기를 실현할 것이다.
급수기가 변화할 수 있는 각 상태를 나타내는 종류를 정의하다.
급수기는 다음과 같은 상태로 변화한다.
  • 가득 채우기
  • 물 있음 (Partially FullState)
  • 컬러
  • 보급 중(RefillingState)
  • 급수 중(ServeState)
  • 정의된 상태는 상태기에서 관리하고 조작합니다.
    상태기를 사용하면 급수기 자체를 조작하는 것보다 더 효과적으로 급수기를 처리할 수 있다.

    단계

  • FullState 정의 클래스
  • 상태기 정의
  • 채워진 상태를 나타내는 클래스 정의


    메뉴 모음에서 "File > New > File...> iOS > Swift File"을 선택합니다.
    파일 이름은 FullState.swift 입니다.
    계승 SpriteKit 클래스의 GameplayKit 클래스를 정의하기 위해 DispenserStateFullState 프레임워크를 가져옵니다.
    FullState.swift
    import SpriteKit
    import GameplayKit
    
    class FullState: DispenserState {
    
    }
    
    부류에 정의된 초기화 프로그램을 사용하여 필요한 초기화 프로그램을 정의합니다.
    또한 didEnter(from:)willExit(to:) 방법을 덮어씁니다.
    FullState.swift
    class FullState: DispenserState {
    
        init(game: GameScene) {
            super.init(game: game, associatedNodeName: "FullState")
        }
    
        override func didEnter(from previousState: GKState?) {
            super.didEnter(from: previousState)
    
            let green = SKColor.green
            changeIndicatorLightToColor(green)
        }
    
        override func willExit(to nextState: GKState) {
            super.willExit(to: nextState)
    
            let black = SKColor.black
            changeIndicatorLightToColor(black)
        }
    
    }
    
    didEnter(from:)방법과 willExit(to:)방법은 급수기의 표시등 색깔을'가득 채운 후 녹색이 가득 채워지지 않으면 검은색'으로 변화시킨다.

    상태기 정의


    상태기는 각종 상태로의 전환을 관리하는 것을 책임지고 GKStateMachine류로 표시한다.
    게임 장면에서 정의GKStateMachine류의 대상.
    먼저 GameScene.swift 프레임워크를 GameplayKit 파일로 가져옵니다.
    멤버 범위 속성stateMachine에서 암시적 확장 옵션을 사용하여 속성을 정의합니다.stateMachine 속성 사용didMove(to:) 방법으로 초기화합니다.매개 변수 전달 GKState 유형의 대상의 그룹입니다.
    GameScene.swift
    import SpriteKit
    import GameplayKit
    
    class GameScene: SKScene {
    
        var stateMachine: GKStateMachine!
    
        override func didMove(to view: SKView) {
            let fullState = FullState(game: self)
            stateMachine = GKStateMachine(states: [fullState])
    
            stateMachine.enter(FullState.self)
        }
    
        override func didChangeSize(_ oldSize: CGSize) {
            let dispenser = childNode(withName: "dispenser")
            dispenser?.position.x = size.width / 2
        }
    
        override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
            let locationInView = touches.first?.location(in: view)
            let locationInScene = convertPoint(fromView: locationInView!)
    
            let refillButton = childNode(withName: "//refillButton")
            let location = locationInScene
    
            if atPoint(location) == refillButton {
                print("attempt to refill.")
            } else {
                print("attempt to dispense")
            }
        }
    }
    
    didMove(to:) 방법에서 급수기의 초기 상태는 FullState라고 기술했다.

    구축


    시뮬레이터로 구축해 보세요.
    급수기의 표시등indicator이 녹색이면 상태는FullState이다.또한 상태 전환 패널의 [완전]이 강조 표시되는지 확인합니다.
    그림충전 상태 급수기

    그림비가만상태 급수기

    다음


    상태기GKStateMachine 클래스를 사용하여 상태GKState 대상을 관리할 수 있다.
    상태기는 GKState 유형의 실례를 조작하지 않고 클래스 자체를 처리하는 것을 알 수 있습니다.
    다음[GameplayKit] iOS 게임 어플리케이션에서의 State 모드 실천 Part_사에는 상태에서 상태까지의 섬유를 실현하기 위해 다른 상태 대상을 정의합니다.

    좋은 웹페이지 즐겨찾기