지금 API만을 이용해서 간단한 2D 게임을 만들고있는데요
그래픽을 출력하기위해서 지금까지 BitBlt 함수를 이용해서 비트맵파일을 출력해왔습니다
그런데 게임내 사용할 캐릭터및 몬스터의 그래픽을 출력해주는데 BitBlt함수만을쓰면 캐릭터의 외곽을 덮고있는 특정색을 제외하고 출력할수가없기에
이 특정색을 제외하여 외곽을 투명하게 만들기위해 TransparentBlt 함수를 썼는데...
이걸쓰니까 제가 BitBlt 함수를 쓸때 사용했던 7개의 움직임이 들어있는 비트맵들을 하나의 비트맵으로 붙여서 BitBlt로 출력할때 로드된 비트맵에서 해당된 영역들을 잘라서 출력함으로써
애니매이션효과를 구현했었는데요
TransparentBlt 함수는 BitBlt와는 달라서 이방식을 쓰려고하면 그림이 확대되거나 출력이 안되거나 하더라구요...
어제부터 계속 속썩이고 있는 문젠데요.. 보통 게임에서 원하는 그래픽만출력하고 나머지부분은 투명하게 출력하여 게임중에 안보이게 하기위해서 어떤 방법을 쓰는지 알고싶습니다..
그리고 지금 쓰고있는 애니매이션방식이 효율적인지..더 좋은 다른 방법이 없는지 알고싶습니다..
우선 궁금하신 확대 출력에 대해서 말씀드리자면, 윈도우 API는 그런 부분에서의 함수 지원은 많이 취약한 편입니다. 무엇보다 DirectX같은 그래픽 위주 API가 아니기 때문에 그렇게까지 할 필요가 없다는 것이겠죠.
하지만 메모리 비트를 잘 응용하면 사용이 가능합니다. (참고로 말하자면, 윈도우 API에서는 비트맵 함수중에서 컬러키를 제거해서 출력해주는 함수와, 알파값을 이용한 투명도를 조정하는 함수 이 두개의 효과는 같이 쓰기 괭장히 어렵습니다. 하지만 약간의 꼼수로 효과를 가능하게 할수는 있죠)
우선 하나의 메모리 비트맵을 만들어 그 안을 컬러키 값으로 채워둡니다. 그리고 BitBlt 함수를 이용해서 확대하며 컬러키 포함 통채로 복사해 넣습니다. 그 메모리 비트맵을 TransparentBlt를 이용해 컬러키를 빼줘서 출력하면 확대된 컬러키 값이 빠진 그림으로 출력이 가능해집니다. 이 동작을 함수화 시켜서 함수호출 한번으로 2개이상의 효과를 동작하게 하는 방법도 사용할수 있겠죠.
윈도우 API에서의 GDI 사용.. 특히 비트맵의 사용에는 위와같은 꼼수를 통해 2개 이상의 효과를 동시에 주는 방법으로 구현을 해줘야 합니다.
하지만 DirectX에서는 그러한 기능을 동시에 제공해주는 함수들이 당연히 구비되어 있지요. 물론 예전에는 그러한 함수들의 속도가 느리거나 종류가 많지 않아서 수동으로 메모리 비트값을 하나씩 읽어서 컬러키값만 제거하고 출력하는 방식도 사용하기도 했습니다.. 하지만 요즘에는 그럴 필요가 없을정도로 빠르고 다양한 효과를 제공하는 함수들이 당연하다는 듯이 제공되어 있습니다.