2011-08-26 7 views
2

나는 내 게임을 만드는 과정에있다. 목표 중 하나는 가능한 한 많은 객체를 전세계에 보유하는 것입니다. 이 게임에서는 많은 발사체가 예상치 못한 시간에 생성되어야합니다 (무기 발사가 개체를 생성하는 것처럼). 발사체가 무언가를 공격하면 개체도 파괴 될 것입니다. .메모리에있는 많은 객체의 생성/제거를 효과적으로 처리하려면 어떻게합니까?

그래서 나는 메모리에서 이것을 처리하는 가장 좋은 방법이 무엇인지 궁금해하고있었습니다. 필자는 스택이나 테이블을 만들고 거기에있는 객체에 포인터를 추가하고 필요에 따라 객체를 만들고 파괴하는 방법에 대해 생각해 보았습니다. 그러나 수백 또는 수천 개의 객체를 프레임간에 즉시 만들거나 파괴하려고하면 어떻게 될까요? 나는 꾸준하고 유동적 인 프레임 속도를 유지하기를 원하며 시스템 호출의 그러한 급상승은 확실하게 느려질 것입니다.

그래서 내가 생각하기에 나는 여러 객체를 메모리에 유지하여 정보를 복사 할 수 있고 필요에 따라 메모리를 요청하지 않고도 사용할 수 있다고 생각했습니다. 하지만 얼마나 많은 기억을 남겨 두어야합니까? 또는 사용자 컴퓨터가 충분하면 (아마도 그들은 게임에 집중하고 백그라운드에서 날씨 시뮬레이션을 실행하지 않을 것입니다) 걱정하지 않아도됩니다.

이 문제를 해결하는 가장 좋은 방법은 무엇입니까?

답변

2

짧은 답변 : 예상 수명에 달려 있습니다.

일반적으로이 방법들을 결합합니다. 상당히 정적이고 제거되거나 자주 생성되지 않는 객체 (대개 플레이어, 레벨, 레벨의 특정 객체 등)는 설명 된 첫 번째 방법으로 작성됩니다 (객체, 배열, 싱글 톤, 등) 정확한 방법은 게임과 생성되는 개체에 따라 다릅니다.

총알, 입자 효과 또는 일부 게임과 같은 단기간의 물체의 경우 대개 object pool pattern과 같은 것이 사용됩니다. 기억의 덩어리는 게임이 시작될 때 반전되고 총알과 예쁜 파티 효과를 내기 위해 게임 과정에서 재사용됩니다. 은 얼마만큼의 메모리를 예약해야합니까?, 이상적인 대답은 "가능한 한 작게"입니다. 불행히도, 때때로 그것을 알아 내기 란 어렵습니다. 그것을 파악하는 가장 좋은 방법은 주어진 시간에 화면에 표시 할 계획의 총알 수 또는 몇 개를 추측하여 두 개를 곱하는 것입니다 (총알 지옥 사수가 실제로 잘 작동하지 않는다고 판단 할 때 단 50 개의 글 머리 기호)를 추가 한 다음 약간의 버퍼를 추가하십시오. 쉽게 이해하려면 그 값을 쉽게 이해할 수있는 #define BULLET_MAX 110에 저장하십시오. 게임이 끝나면 값을 변경할 수 있으며, 그 값이 그만큼 변동하지 않을 것이라고 합리적으로 확신 할 수 있습니다. 재미를 더하기 위해 값을 구성 변수에 연결하고 그래픽 설정을 적용하여이 변수에 영향을 줄 수 있습니다.

1

유동성이 중요한 실시간 게임에서 그들은 종종 레벨의 시작 부분에 많은 양의 메모리를 할당하고 게임 중간에 할당/할당 취소를 피합니다.

게임 정비사가 게임에서 메모리가 부족하지 않도록 디자인 할 수 있습니다 (예 : 플레이어가 너무 자주 촬영할 때 무기가 막힐 가능성이 높아짐).

그래도 궁극적으로는 목표로하는 최소 지원 기계에서 게임을 테스트하십시오. 속도가 빠르면 가볍고 가상의 상황에서 코드가 지나치게 복잡하지는 않습니다.

관련 문제