2011-11-01 5 views
0

나는 최고의 사운드 핸들링을 필요로하는 게임을 만들고 있습니다. 효과를 재사용 할 수 있도록 개체 풀을 만들었습니다. 내 문제는 각 사운드 유형에 대한 풀을 만들지 않고도 멋진 풀 솔루션을 작성하는 방법입니다. 풀의 체크 아웃 기능은 목록의 첫 번째 사운드를 반환합니다.AS3 Object Pool (사운드 효과 용)

우리가 풀에서 빌려 오는 항목에 내가 만들고자하는 것과 같은 소리가 들리는 지 확인하십시오. 같은 소리라면 다시 소리를 내지 않습니다. 그렇지 않은 경우 풀에 올바른 사운드의 인스턴스가 있음을 알고 있더라도 만듭니다.

var item : ISoundItem = _soundPool.checkOut(); 

if(item.name != name) 
    item.create(name, _soundFactory.create(name), config); 

이 더러운 솔루션으로 인해 인스턴스가 수백 개에서 약 7 개로 줄어들었지만 더 이상 최적화 할 수 있다고 생각합니다.

저는 사운드 이름을 체크 아웃 기능에 전달하려고 생각했지만 매번 풀을 반복해야 할 가치가 있습니까?

아이디어가 있으십니까?

답변

1

빠른 검색을 원할 때 많은 소리가 들리면 사전 개체를 사용하여 벡터 또는 배열 대신 사운드 참조를 유지하는 것이 좋습니다. 사전은 조회에 반복을 사용하지 않습니다. 항상 일대일입니다. 다음과 같이하면됩니다.

var item : ISoundItem = _soundPool.checkOut(MySoundA); 
var item : ISoundItem = _soundPool.checkOut(MySoundB); 

이 경우 이름으로 전화를 걸 때에는 아무런 불이익이 없습니다. ISoundItem을 구현하는 객체가 사전에 추가되는 것을 클래스에서 허용하는 것이 좋습니다.

이 구현은 소리 사용 빈도에 따라 다릅니다. 자주 사용하지 않는다면 아마 잘 될 것입니다. 긴 소리이거나 매우 빠르게 사용하는 경우 사전 배열이나 그와 비슷한 것을 고려해 볼 수 있습니다.

+0

효과는 자주 재생됩니다. 즉, 풀에 중복되는 효과가 있습니다. – Mattias

+0

@Mattias 흠. 아마도이 문제를 해결하기위한 해킹을 찾을 수는 있지만 실제로 찾고자하는 것을 수행하는 특정 데이터 구조가있을 것입니다. 귀하의 경우에는 특정 항목에 대한 사전 배열 또는 링크 된 목록 사전을 권하고 싶습니다. –

+0

흠. 어쨌든 이것이 최선의 방법 일 것입니다. 벡터가 포함 된 사전을 사용해 보겠습니다. 감사. – Mattias