Lim's Studio
Posts
7 posts
NyanCat Player
YouTube에서 한창 인기가 좋길래 따라해 봄. 스페이스 바: 재생/일시정지 좌/우 키: 볼륨 조절 ESC: 종료 맨 처음 음악 선택 다이얼로그에서 취소를 누르면 기본 음악을 불러옴. 불러온 음악은 무한 재생. VC++2012로 컴파일 됨. FMODEx, DX9.0c 2010Feb사용.
지형 충돌과 이동에 관한 고찰 3
이제 이 항목에 대해서는 거의 마무리를 지은 듯 하다. 그래서 충돌 영역을 생성하는 것 부터 게임에 적용되는 것까지 정리해 보려고 한다. 먼저 충돌 영역의 생성. 충돌 영역을 생성하려면 그림을 그릴 수 있는 도구가 필요하다. 본래는 맵 에디터를 만들어 그 안에서 해결하려고 했는데 좀 무리수였던 것 같다. 그래서 그림판을 이용하여 충돌영역을 생성할 수 있도록 했다. 그리고 그렇게 만든 이미지를 게임에 적용할 수 있도록 변환시켜주는 프로그램도 같이 작성하였는데, 그 프로그램의 의사는 대강 이러하다. 이미지 파일을 읽어온다.이미지의 전체 픽셀을 순회하며 검사를 한다. 이 때 x축에 대해서 블록 생성에 유효한 픽셀이라면 해당 좌표로 충돌 영역(RECT)을 생성한다.이미지의 전체 픽셀을 순회한 후

지형 충돌과 이동에 관한 고찰 2
본격적으로 맵에디터를 만들기 시작했기 때문에 빨리 이 문제를 해결해야 겠다고 느껴서 생각을 마무리지었다. 먼저 전체 영역은 다른 알고리즘들에 비해 연산량이 적어서 무리가 없을 것 같아 사각형을 이용해 체크하기로 했다. 또한 블록이 열거되어있는 형태는 한 블록으로 대신해서 비교하도록 만들 계획이다. 그리고 경사면에 대해서. 이 부분에 대해서는 미리 블록들을 정해놓고 배치하는 형태로 해보려 한다. 가령, 밑변과 높이가 각각 32px인 삼각형이면 그 위를 지나갈 때 각도는 45도 이므로 캐릭터 방향벡터를 45도로 바꿔주고 다시 평지가 되면 0도로 바꿔주고, 이런식으로 말이다. 또 한가지 주의할 점이라면 이런 경사면은 라인으로 충돌을 처리해야 하는데,

지형 충돌과 이동에 관한 고찰
오늘은 지형 충돌에 대해 생각해 봤다. 처음 생각난 것은 모두 사각형으로 비교해서 충돌하려고 했는데, 그렇게 하면 경사면같은 물체는 이동할 수 없게돼서 포기했다. 또 그 경사면들만 따로 만들어 주자니, 개수에 너무 제한적이었다. 두 번째로 떠오른 것은 사격형과 선분끼리 충돌시키는 것이었다. 캐릭터들은 어차피 사각형 마스크로 비교하니까 그렇게 하면 될 것 같았다. 그래서 캐릭터 마스크 에디터 만들 때 처럼 충돌 선분을 직접 그려서 숫자로 뽑으려고 했는데 이건 알고리즘 짜기가 여간 복잡한게 아니었다. 점끼리 연결상태 파악하기가 쉽질 않았다. 그래서 맵 에디터를 만들면서 그 위에 직접 선분을 그을 수 있게 만들어 버리도록 생각을 해보니 그렇게 하면 될 듯 싶어서 생각은 그 쯤에서 마쳤다.
벡터로 위치이동
보통 간단한 이동을 구현한다면, 좌로 이동할 때 x-=1; 아래로 이동할 때 y+=1;처럼 코딩하기 마련이다. 그러니까, if(GetAsyncKeyState(VK_LEFT))x-=1; else if(GetAsyncKeyState(VK_RIGHT))x+=1; if(GetAsyncKeyState(VK_UP))y-=1; else if(GetAsyncKeyState(VK_DOWN))y+=1; 이런식으로 말이다. 그런데 저 말대로 한다면 상하좌우 각각의 4방향 이동은 문제 없겠지만, 4가지 대각선 방향을 이동할 때 약간의 문제가 생긴다. 상하좌우의 경우는 각각 1만큼 움직일 테지만, 대각선은 두 키의 명령이 같이 이행됨에 따라 결과적으로 root 2만큼 움직여 버리는 것이다. 이를



