Chr*_*ker 7 state-machine gamekit swift
我一直在为Swift研究Apple的状态机,并找到了几个例子,但是没有一个真的死了.
有人可以在Swift中掀起一个超级简单的GKStateMachine,可能有两个状态,最好是在一个Swift文件中?谢谢!
vac*_*ama 16
以下是在美国工作的交通灯状态机的示例.红绿灯从green -> yellow -> red -> green.
在应用程序中,您可能会让didEnter(from:)例程更新屏幕图形,或允许其他actor移动.
import UIKit
import GameKit
class Green: GKState {
override func isValidNextState(_ stateClass: AnyClass) -> Bool {
return stateClass is Yellow.Type
}
override func didEnter(from previousState: GKState?) {
print("Traffic light is green")
}
}
class Yellow: GKState {
override func isValidNextState(_ stateClass: AnyClass) -> Bool {
return stateClass is Red.Type
}
override func didEnter(from previousState: GKState?) {
print("Traffic light is yellow")
}
}
class Red: GKState {
override func isValidNextState(_ stateClass: AnyClass) -> Bool {
return stateClass is Green.Type
}
override func didEnter(from previousState: GKState?) {
print("Traffic light is red")
}
}
class ViewController: UIViewController {
var stateMachine: GKStateMachine?
override func viewDidLoad() {
super.viewDidLoad()
// Create the states
let green = Green()
let yellow = Yellow()
let red = Red()
// Initialize the state machine
stateMachine = GKStateMachine(states: [green, yellow, red])
// Try entering various states...
if stateMachine?.enter(Green.self) == false {
print("failed to move to green")
}
if stateMachine?.enter(Red.self) == false {
print("failed to move to red")
}
if stateMachine?.enter(Yellow.self) == false {
print("failed to move to yellow")
}
if stateMachine?.enter(Green.self) == false {
print("failed to move to green")
}
if stateMachine?.enter(Red.self) == false {
print("failed to move to red")
}
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
Run Code Online (Sandbox Code Playgroud)Traffic light is green failed to move to red Traffic light is yellow failed to move to green Traffic light is red
| 归档时间: |
|
| 查看次数: |
1749 次 |
| 最近记录: |