일반적으로.. 오브젝트가 생성되면 삭제가 되기 마련이다.
(이 글은 필자는 탄막슈팅게임을 만들면서 느낀 점이다)
특수한 경우 이러한 상태가 수 많이 반복되야 한다.
(위 상황)
이럴 때 우리는 어떻게 퍼포먼스를 높일 수 있을까 고민을 하게된다.
물론, 좋은 게임환경(ex PC)에서는 어느정도의 처리도 감안할 수 있지만
모바일, 웹 같은 상대적으로 적은 리소스를 가지고 게임을 표현할 경우 이러한 문제도 깊게 생각해봐야 한다.
그래서, 일반적은 생성과 삭제를 살펴본다면(예시는 슈팅게임으로 진행한다)
총알 객체
Class Bullet{}이 존재한다면 이것을 관리하기 위한 배열
Bullet<List>이 필요하겠다.
다행이게도 이러한 Array는 기본적으로 제공하는 사용법이 있다. 가령,
추가의 Put()
삭제의 Slice()
선택의 Get()
이러한 함수들은 일반적인 배열의 삭제나 선택의 방식보다 빠르고 좋은 성능을 가진다.
(WorstCase - 배열의 삭제)
하지만 이러한 제공 함수들도 Cost가 요구된다.
이러한 경우 Array의 overwrite를 활용 할 수 있다.
ex) 총알이 한 화면에서 최대 100개 까지 표현될 수 있다면
queue형태의 array queue 자료구조를 활용하는 방법도 생각할 수 있다.
만약, maxSize를 예상할 수 없다면
list 크기 변환은 C라면 malloc으로 Java라면 new 로 array의 Size를 동적으로 관리 할 수 있다.
이러한 아이디어는 os에서 process에 할당하는 memory 관리에서 쓰이는 원리이다(실제로는 pointer로 linkedList를 관리하며 alloc link와 dealloc link를 관리하며 훨씬 효율적으로 사용된다)
'알고리즘' 카테고리의 다른 글
더블 버퍼링 (0) | 2015.02.12 |
---|---|
임의의 순서로 이루어진 순열 얻기 (0) | 2015.02.10 |
현재 화면에 맞춰 이미지 크기 변경 (0) | 2015.02.10 |
XOR 교체 알고리즘 (0) | 2015.01.29 |
충돌범위 (0) | 2015.01.08 |