C#의 상태 비 저장 상태 머신을 사용하고 있지만 다른 주 기계 구현과 관련하여이 문제가 과거에 발생했습니다. 질문은 대부분 이론적인데, 더미 코드를 추가 할 수는 있습니다.발신자 상태로 돌아 가기?
저는 어떻게 해결해야 할 지 확신 할 수없는 상황이 있습니다. 두 가지 상태 (걷기와 달리기)가 있고 둘 다 세 번째 상태 (점프)로 전환 할 수 있다고 가정 해 보겠습니다. 세 번째 상태가 완료되면 발신자 상태로 돌아가고 싶습니다. 어떤면에서는 호출 수신자 트리거에 영향을 미칠 수 있어야하지만 이것은 상태 자체가 아닌 OnEntry
등으로 전달됩니다.
EntryFrom
을 사용하면 "점프"상태 자체에 영향을 줄 수있는 방법이 없으므로 OnEntry
기능 만 작동합니다. PermitDynamic
을 사용하면 "점프"상태가되어 어디에서 왔는지 모르기 때문에 어느 쪽도 작동하지 않는 것 같습니다.
일부 중복 코드를 최소화하기 위해 하나의 OnEntry
기능으로 2 개의 점프 상태 (jumpfromrun, jumpfromwalk)를 가질 수있었습니다. 이것은 내가 현재 사용하는 것입니다.
외부 변수에 이전 상태를 저장하고이를 내 상태 업데이트에 전달할 수 있습니다. 나는 이것을 (전혀)하고 싶지 않다.
이러한 종류의 문제를 해결할 수있는 알려진 기술이나 방법이 있습니까? 공유 상태가되면 발신자에게 다시 전환해야합니까? 감사합니다.
"점프"상태에있는 유일한 방법은 아직 거기에 도착한 방법을 기억하는 것입니다. 상태 (걷기 점프와 뛰기 점프) 또는 다른 종류의 저장소 여분의 enum 변수 등) – Alexander
질문에서 언급했듯이, 그것은 현재 내가 사용하는 것입니다.그러나 복사 - 붙여 넣기 코드가 많아서 큰 해결책은 아니며, 유일한 다른 행은 트리거 호출입니다./두 상태는 완전히 동일합니다. – scx
붙여 넣은 코드를 너무 많이 복사하는 이유는 무엇입니까? OnEntry, OnExit 및 Permit을 복제해야하지만 '점프'코드 자체는 점프 유형 모두에 의해 호출되는 함수로 추출 될 수 있습니다 – Alexander