게임 엔진에서 스크립팅을 구현하는 방법에 어려움을 겪고 있습니다. 몇 가지 요구 사항 만 있습니다. 직관적이어야하며 사용자 지정 언어, 파서 및 인터프리터를 작성하고 싶지 않으며 스레딩을 사용하고 싶지 않습니다. (더 간단한 솔루션이 있다고 확신합니다. 여러 게임 로직 스레드가 필요하지 않습니다.) 다음은 Python (일명 의사 코드)의 스크립트 예제입니다.
def dramatic_scene(actors):
alice = actors["alice"]
bob = actors["bob"]
alice.walk_to(bob)
if bob.can_see(alice):
bob.say("Hello again!")
else:
alice.say("Excuse me, Bob?")
장대 한 스토리 텔링은 구현 문제를 야기합니다. walk_to
게임 시간이 걸리기 때문에 전체 방법을 한 번에 평가할 수는 없습니다 . 그것이 곧바로 돌아 오면 Alice는 Bob에게 걸어 가기 시작하고 (같은 프레임에서) 인사합니다. 그러나 walk_to
Bob에 도달했을 때 반환되는 차단 호출 인 경우 Alice가 걸을 수있는 동일한 실행 스레드를 차단하기 때문에 내 게임이 중단됩니다.
나는 각 함수가 액션을 대기열에 alice.walk_to(bob)
넣는 것을 고려 했다. 큐에 객체를 밀어 넣을 것이다. 앨리스는 어디에 있든 Bob에게 도달 한 후에 튀어 나올 것이다. 좀 더 미묘하게 깨졌습니다. if
지점이 즉시 평가되므로 Bob이 등을 돌리더라도 Alice가 인사 할 수 있습니다.
스레드를 만들지 않고 다른 엔진 / 사람이 스크립팅을 어떻게 처리합니까? jQuery 애니메이션 체인과 같은 게임이 아닌 영역에서 아이디어를 찾기 시작했습니다. 이런 종류의 문제에는 좋은 패턴이 있어야합니다.