All250 다른 게임의 에셋 이미지 가져와서 적용하는데 성공! 다른 모바일 게임을 언팩해서 비트맵 이미지를 구했다. 상업용이 아니면 저작권에 문제가 없다고 하니 괜찮겠지.. 근데 아래 이미지인데 발사되는걸 보면 투명처리가 완벽하게 되지 않았다 왜일까.. RGB 텍스쳐가 아니라 알파가 들어간 RGBA라 그런 것 같다. 찾아보니 아쉽게도 DirectDraw에선 알파값을 사용할 수 없는 듯함. 2020. 12. 9. 이미지 파일 컬러키 설정 꿀팁 인터넷에서 다음과 같이 원하는 이미지를 구했는데 원하는 파일 포맷으로 변경하면 다음과 같이 계속 배경색이 검정색으로 변경됐다. 보다시피 캐릭터 자체에 검정색이 들어있기도 하고 검정색을 컬러키로 쓰고 싶진 않아서 캡쳐 등 별 짓을 다해보다가 알아냈다.. 우선 첫번째 그림처럼 배경색이 없는 캐릭터 이미지를 파워포인트에 붙여넣는다. 그럼 다음과 같이 선택된다. 이미지에 오른쪽을 클릭하면 그림 서식이란 메뉴가 있다. 누르면 다음과 같은 창이 뜬다. 여기서 단색 채우기를 누르고 원하는 색상을 지정한다. 보통 컬러키는 마젠타로 지정하니.. 마젠타 색상은 RGB순으로 255 0 255이다. 그럼 다음과 같이 변한다. 위 이미지를 오른쪽 클릭해서 그림으로 저장을 누른다. 파일 포맷은 png로 한다. jpg는 다른 포맷.. 2020. 12. 5. 클래스에서 가변 인자 템플릿 이용 시 함수 선언 방법 다음과 같이 클래스 템플릿에서 특정 함수의 인자로 타입마다 다른 인자를 받고 싶을 때 함수를 다음과 같은 규격으로 작성해야 한다. template class A { public: template T* Get(Type... _Args); }; template template T* A::Get(Type... _Args) { return new T(_Args...); } int main() { A a; A b; Vector2* pVec2 = a.Get(3, 4); cout X 2020. 12. 2. DirectDraw 학습 (4) - 사각형 이동시켜보기 저번 내용에 추가로 다음과 같이 방향키로 사각형을 움직이는 간단한 동작을 추가해본다. 동영상을 gif로 변환해서 그런지 좀 버벅거리는 것처럼 보인다. 이동할 땐 초록색을 가지고 멈춰 있을 땐 빨간색을 가진다. 위 동작의 원리는 매우 단순하다. 현재 사각형의 x 및 y 좌표를 가지고 있다가 방향키가 눌리면 그 방향으로 일정 수만큼 더하거나 뺀다. 그러면 다음에 다시 그려질 때 변경된 좌표에 다시 그려지면서 이동한 것처럼 보이게 된다. 이때, 기존 버퍼를 수정하지 않으면 이전에 그려졌던 사각형이 그대로 남아있을 것이다. 따라서 사각형을 그리기 전에 버퍼 전체를 지우거나 배경을 새로 그린 뒤 사각형을 그려야 한다. 방향키가 눌리고 떼지는 것을 체크하기 위해 WndProc에 WM_KEYDOWN 메세지와 WM_K.. 2020. 11. 23. DirectDraw 학습 (3) - Set pixel 지난 번에 Draw를 하기 위한 절차를 알아 보았다. 이번엔 직접 화면의 픽셀을 변경해 볼 것이다. 다시 한번 Draw 과정을 살펴보면 적절한 초기화 후 보조 표면에 Lock을 걸고, 얻은 보조 표면의 메모리 주소를 통해 write을 한다. 그리고 Unlock 후 blt을 통해 보조 표면에 작업한 것을 주 표면에 전송하여 스크린에 보이도록 한다. 우선 Lock을 통해 다음과 같이 보조 표면의 시작 주소와 pitch를 얻었다. // 예외 처리는 생략한다. DDSURFACEDESC2 ddsc = {}; ddsc.dwSize = sizeof(DDSURFACEDESC2); m_pDDBack->Lock(nullptr, &ddsc, DDLOCK_WAIT, nullptr); // 보조 표면의 시작 주소와 pitch .. 2020. 11. 21. DirectDraw 학습 (2) - Draw 기본적인 DirectDraw 초기화가 완료되었으면 장면을 그릴 수 있다. 우선 이전에 설명했듯이 장면은 보조 표면 또는 오프스크린에 그려야 한다. 그리고 flip 또는 blit을 통해 미리 그렸던 장면을 보이게 하는 것이다. 따라서 우린 이전에 만들어 놓은 보조 표면(오프스크린)에 장면을 그릴 것이다. IDirectDrawSurface7::Lock 보조 표면에 장면을 그리기 위해선 보조 표면에 대한 메모리 주소를 얻어와야 한다. 그리고 여기에 write을 하기 위해선 다른 곳에서 혹시나 해당 메모리에 접근하지 못하도록 적절한 제어가 필요하다. 이를 위해 DirectDraw는 Lock 함수를 제공한다. Lock 함수는 surface 객체를 통해 호출한다. Lock 함수의 역할은 해당 surface에 대한 .. 2020. 11. 17. 이전 1 ··· 12 13 14 15 16 17 18 ··· 42 다음