State Pattern
Game, Tool Program 에서 주로 사용하는 상태 패턴들에 대해 알아보자
FSM(Finite State Machine)
// Player State base-class
public abstract class PlayerState {
abstract void HandleInput(Player player, KeyCode key);
abstract void Update(Player player);
// 정적 객체로 상태를 정의해두면 매번 인스턴스 생성으로 소모되는 CPU 자원 낭비를 줄일 수 있다.
public static GroundState ground = new GroundState();
public static RunningState running = new RunningState();
}
public class GroundState : PlayerState {
override void HandleInput(Player player, KeyCode key) {
player.command.execute(key);
return PlayerState::IdleState;
}
override void Update(Player player) {
player.animate.idle();
}
}
// Usage
public class Player : Actor {
private PlayerState state;
void Update() {
state.Update(this);
}
void OnInputHandle() {
PlayerState newState = state.HandleInput(keyCode);
// 만약 새로운 상태가 반환되면 상태를 교체하고 상태 진입 메서드를 호출해서
// 애니메이션 변경 등 초기화 동작을 포함할 수 있다.
if (newState != null) {
delete state;
state = newState;
state.enter();
}
}
}HSM(Hierarchical State Machine)
Push-down Automata
Last updated