알레그로 샘플 올린다고 해 놓고, 주말 내둥 잠을 자 버렸군요.
대충 만들어 뒀던 녀석을 걍 압축해서 올립니다. (이거 뭐.. 심하게 무책임한데..;;)
핵심 코드는 다음과 같습니다.
위 코드가 핵심인데, 캐릭터가 움직이도록 하는 부분입니다. (우측으로만 가능함 ;;)
중복된 코드를 함수 하나로 몰아버린 코드입니다.
더불어, 중간에 middle pos 라고 주석이 붙은 부분이 보일텐데,
이는 이미지 파일(첨부한 이미지 파일 참조)에서 캐릭터의 움직임이 3 개 프레임으로 나뉘어 있고,
프레임(인덱스)이 0 1 2 1 0 1 2 1 0 과 같이 반복되어야 하기 때문에
0 1 2 다음에 1 로 바뀔때를 체크하기 위한 루틴입니다.
음, 제가 쓰고보니 이해가 안되는군요. 이건 뭐.. 외계어도 아니고..
PS. 원래는 좌측방향도 출력되도록 해 놓고 소스를 올릴려고 했었는데.. ;;
PS. 제 환경이 리눅스라서, 윈도우에서는... 재주껏 하세요 ㅎㅎ;
PS. 윈도우에서 allegro 환경 잡고 빌드하면 되긴 할꺼예요. 아마;;
PS. 저 이미지, 저작권 있는거겠죠? 흑... 근데, 전 저작권이 없는데 어떻게 해야 하나요? T^T
PS. sample_character_moving_allegro.zip
이글루스 가든 - 게임 프로그래머 되기
대충 만들어 뒀던 녀석을 걍 압축해서 올립니다. (이거 뭐.. 심하게 무책임한데..;;)
핵심 코드는 다음과 같습니다.
int CCharacter::Walk(__inout PBITMAP pDest,
__in int VertFrame,
__in int VecX,
__in int VecY,
__in int MiddleFrame)
{
if (!pDest) return -1;
if (m_pBmp)
{
int StartWidth = 0;
int StartHeight = 0;
StartHeight = m_Height * VertFrame;
if (m_wCurFrm == m_wMaxFrmCnt) // middle pos
StartWidth = m_Width * MiddleFrame;
else
StartWidth = m_Width * m_wCurFrm;
blit(m_pBmp, pDest, StartWidth, StartHeight, \
m_PosX, m_PosY, m_Width, m_Height);
m_PosX += VecX; // horizontal vector
m_PosY += VecY; // vertical vector
}
if (m_wCurFrm == m_wMaxFrmCnt)
m_wCurFrm = 0;
else
m_wCurFrm ++;
return 0;
}
위 코드가 핵심인데, 캐릭터가 움직이도록 하는 부분입니다. (우측으로만 가능함 ;;)
중복된 코드를 함수 하나로 몰아버린 코드입니다.
더불어, 중간에 middle pos 라고 주석이 붙은 부분이 보일텐데,

프레임(인덱스)이 0 1 2 1 0 1 2 1 0 과 같이 반복되어야 하기 때문에
0 1 2 다음에 1 로 바뀔때를 체크하기 위한 루틴입니다.
음, 제가 쓰고보니 이해가 안되는군요. 이건 뭐.. 외계어도 아니고..
PS. 원래는 좌측방향도 출력되도록 해 놓고 소스를 올릴려고 했었는데.. ;;
PS. 제 환경이 리눅스라서, 윈도우에서는... 재주껏 하세요 ㅎㅎ;
PS. 윈도우에서 allegro 환경 잡고 빌드하면 되긴 할꺼예요. 아마;;
PS. 저 이미지, 저작권 있는거겠죠? 흑... 근데, 전 저작권이 없는데 어떻게 해야 하나요? T^T
PS. sample_character_moving_allegro.zip
이글루스 가든 - 게임 프로그래머 되기


덧글