(μΆν λ§λ€μ΄μ§ μ νλΈ λ§ν¬ μΆκ°)
GameplayKitμμ μ¬μ©ν μ μλ κΈ°μ λ€μ μκ² λμκ³ , State Machinesμ νμ©νμ¬ μ¬μ©μμ μ λ ₯μ λ°λ₯Έ
μν μ νκ³Ό, κ·Έμ λ°λ₯Έ νλ μ μλ₯Ό μ½κ² κ΄λ¦¬ν μ μλ€λ κ²μ μκ² λμλ€.
GameplayKitμμ State Machinesλ₯Ό νμ©νκ³ , SpriteKitλ₯Ό μ¬μ©νμ¬ 2D κ·Έλν½μ μΆκ°νκ³ μ¬μ©νμλ€.
짧μ μκ°λμ κ°λ³κ³ μ½κ² μ¦κΈΈ μ μλ 1μΈμ© μ₯μ λ¬Ό νΌνκΈ° κ²μμ λ§λ€μ!
-
-
-
-
GameEndView : μ₯μ λ¬Όμ λΆλͺνμ κ²½μ° κ²μμ΄ μ’ λ£λκ³ , νμ¬ λ° μ΅κ³ μ€μ½μ΄λ₯Ό νμΈ
// μν κ΄λ¦¬ ν΄λμ€ μμ
import GameplayKit
// κ²μμ΄ μ§ν μ€μΌ λμ μν ν΄λμ€
class PlayingState: GKState {
override func didEnter(from previousState: GKState?) { // μλ‘μ΄ μνμ μ§μ
ν λ νΈμΆ + μ΄κΈ°ν μμ
μ μΆκ°ν μ μμ
startPlaying()
}
override func update(deltaTime seconds: TimeInterval) { // 맀 νλ μλ§λ€ νλμ νΈμΆ
updateGameLogic(deltaTime: seconds)
}
override func willExit(to nextState: GKState) { // λ€λ₯Έ μνλ‘ μ νλ λ νΈμΆ
stopPlaying()
}
private func startPlaying() {
// κ²μ νλ μ΄ μ΄κΈ°ν μ½λ
}
private func updateGameLogic(deltaTime: TimeInterval) {
// κ²μ λ‘μ§ μ
λ°μ΄νΈ μ½λ
}
private func stopPlaying() {
// κ²μ νλ μ΄ μ 리 μ½λ
}
}
// μνλ¨Έμ μ€μ μμ
class GameStateManager: ObservableObject {
private let stateMachine: GKStateMachine
//pause μν νμΈ Bool
@Published private(set) var isPaused: Bool = false
init() {
stateMachine = GKStateMachine(states: [
PlayingState(),
PausedState(),
EndState()
])
// μ΄κΈ° μνλ₯Ό PlayingStateλ‘ μ€μ
stateMachine.enter(PlayingState.self)
}
//pause μν νμΈ λ©μλ
func update(deltaTime seconds: TimeInterval) {
stateMachine.update(deltaTime: seconds)
isPaused = currentState is PausedState
}
func play() {
stateMachine.enter(PlayingState.self)
}
func pause() {
stateMachine.enter(PausedState.self)
}
func end() {
stateMachine.enter(EndState.self)
}