일부 기능을 수행하는 많은 (많은) 엔티티가 있고 모든 프레임에서 항상 필요하거나 고려할 필요는없는 게임이 있다고 가정합니다. 이 문제가있는 구체적인 문제는 장기를 포함한 신체의 세부 시뮬레이션입니다.
게임에서 각 생물은 자신의 몸을 가지고 있으며, 몸은 작은 부분 (몸통, 다리 등)으로 분리되어 있으며 때로는 신체의 특정 기능을 수행하는 기관이 포함되어 있습니다. 장기가 현재 목적을 제공하는지 또는 활동 중인지 여부는 실제로 분명하지 않습니다. 결국, 동물은 공복이있을 수 있으므로 아무것도 소화 할 필요가 없습니다. 세계에 많은 생물체가있는 즉시 각 프레임의 모든 물체를 확인하거나 시뮬레이션하는 것은 매우 어리석은 일입니다. 그래서 업데이트가 필요한 객체와 그렇지 않은 객체를 현명하게 구별하는 방법에 대해 생각하고있었습니다.
내가 생각해 낸 것은 적어도 괜찮은 해결책 인 것 같습니다. 시뮬레이션해야 할 객체가 상주하는 "주의 스택"이라고하는 간단한 큐 / 스택 (필수는 각 요소가 읽히자 마자 제거됩니다. 순서는 관계가 없습니다)을 만듭니다. 주의를 기울여야하는 물체는 단순히 스택 위에 놓 이거나 다른 물체에 의해 쌓 입니다. 이 객체들은 아마도 simulate () 함수를 가진 간단한 인터페이스를 구현할 것입니다.
이전 소화 예제에 적용하면 다음을 의미합니다.
플레이어는 인벤토리에서 먹을 것을 선택하고 (빵이라고 가정) 캐릭터의 입에 넣고 입은주의 스택에 놓입니다. 다음 프레임에서는 입에서 스택을 가져 와서 그의 시뮬레이트 () 함수가 호출됩니다. 입 이니까 여기서 씹는 것을 시뮬레이션하는 것이 합리적입니다. 이것은 음식이 삼킬 준비가 될 때까지 입이 계속 쌓이는 몇 프레임 동안 계속 될 수 있습니다. 이 경우 입은 씹은 빵을 위장에 넣습니다 (직접 가지는 않지만 식도는 단순화를 위해 빠져 있습니다). 그런 다음 관심 스택에 놓입니다. 다음 프레임에서 소화 과정의 시뮬레이션이 시작됩니다. 나머지 필요한 장기도 마찬가지입니다.
이것에 대한 예측 가능한 문제는 유휴 개체입니다. 잠자는 동물이 좋은 예입니다. 잠자는 동물을 쌓아두고 깨어날 필요가있을 때마다 확인하여 이전에 설명한대로 수행 할 수 있지만, 이것이 유일한 일이기 때문에 낭비가되는 것 같습니다. 유휴 개체를보다 효율적으로 만들기 위해 특정 시간에 수행 할 작업을 저장하는 일정을 추가 할 계획이었습니다. 동물이 잠 들면 동물이 잠들기 시작한 후 일정 시간 동안 일정을 잡게됩니다. 이 작업은 잠자는 동물을주의 스택에 다시 넣는 것을 돌볼 것입니다. 주의 스택에 있지 않은 잠자는 동물은 인공 지능이 시뮬레이션되지 않았기 때문에 어떤 것에 의해 공격당하는 것을 놓칠 수 있다고 말할 수 있습니다.
나는 이것이 경험 부족으로 인해이 문제에 대한 우아한 해결책에 가까운 지 솔직히 모르겠습니다. 사용할 수있는 물건에 가까이 있습니까? 이것은 보통 어떻게 이루어 지거나 제안이나 더 나은 해결책이 있습니까?