알고리즘 26

더블 버퍼링

더블 버퍼링(double buffering)은 자주 쓰이는 기술이다. 그림을 그릴 때(화면에 표현) 우리는 도화지(canvas)에 그리고자 하는 대상(이미지, 선, 도형..)을 그리게 되는데게임 또는 빈번하게 화면이 변경되는 경우에는 위 방식을 사용하면 1. 화면에 도형을 그린다.2. 화면을 지운다(reset) 1, 2의 반복이 된다. 이 경우, 화면에는 잔상 또는 깜빡임이 발생한다. 이러한 현상을 막기 위해 더블 버퍼링을 쓴다. 더블 버퍼링은 직접 화면에 그림을 그리기 전에 백 버퍼(back buffer)공간에 그려야 하는 이미지들을 먼저 그리고화면 버퍼(front buffer)와 백 버퍼(back buffer)의 교환으로 화면에 이미지를 그리는 기술이다. 이 때, 버퍼간의 교체는 매우 빠르고 효율적이..

알고리즘 2015.02.12

XOR 교체 알고리즘

XOR 교체 알고리즘은 임시 변수를 사용하지 않고 비트연산을 통해 두 변수의 값을 교체하는 알고리즘이다.과거 프로세서의 최적화 능력이 부족했을 때 대안으로 자주 사용되었다. 알고리즘은 아래와 같다.X ← X XOR Y Y ← X XOR Y X ← X XOR Y각 줄은 기계어 명령에 대응될 수 있다. 증명은 아래와 같다. 비트 문자열에 대한 XOR 이항 연산은 다음과 같은 성질을 갖는다. 여기서 는 XOR 연산자를 뜻한다.L1. 교환법칙: L2. 결합법칙: L3. 항등원의 존재: 어떤 에 대하여서도, 가 되는 값 이 존재한다.L4. 각 원소에 대해 유일한 역원의 존재: 각 에 대하여, 가 되는 가 존재한다.L4a. 각 원소의 역원은 사실 자기 자신임: L1부터 L4까지의 성질은 아벨 군(ablian gro..

알고리즘 2015.01.29

오브젝트를 생성하고 삭제하는 문제

일반적으로.. 오브젝트가 생성되면 삭제가 되기 마련이다. (이 글은 필자는 탄막슈팅게임을 만들면서 느낀 점이다) 특수한 경우 이러한 상태가 수 많이 반복되야 한다. (위 상황) 이럴 때 우리는 어떻게 퍼포먼스를 높일 수 있을까 고민을 하게된다. 물론, 좋은 게임환경(ex PC)에서는 어느정도의 처리도 감안할 수 있지만 모바일, 웹 같은 상대적으로 적은 리소스를 가지고 게임을 표현할 경우 이러한 문제도 깊게 생각해봐야 한다. 그래서, 일반적은 생성과 삭제를 살펴본다면(예시는 슈팅게임으로 진행한다) 총알 객체 Class Bullet{}이 존재한다면 이것을 관리하기 위한 배열 Bullet이 필요하겠다. 다행이게도 이러한 Array는 기본적으로 제공하는 사용법이 있다. 가령, 추가의 Put() 삭제의 Slice..

알고리즘 2015.01.08

충돌범위

필자는 2D게임에 대한 개발 경험이 있으므로 이 글에서 언급되는 충돌 알고리즘은 2d가 기준이 된다. 충돌처리는 많은 부분에서 쓰인다. 하지만 게임에서는 더더욱 빠질 수 없는 부분이다. 흔히 충돌을 감지할때는 서로의 영역(Range)안에 서로가 겹쳐(Overlab)되어 있는 여부를 확인함으로써 충돌(Collision)인지를 검출한다. 이 중에 Range에 관해서는 크게 2가지로 나눌 수 있다. 1. 사각형 이것은 가장 일반적인 영역으로 4변의 직각으로 이루어진 도형을 말한다. 사각형은 2가지로 표현 될 수 있는데 각 점을 x1, y1, x2, y2로 봤을 경우 Rect(x1, y1, x2, y2) 와 width = x2 - x1 , height = y2 - y1으로 생각한 Rect(x1, y1 , wid..

알고리즘 2015.01.08