아, 이런 샘플! Study+more

알레그로 샘플 올린다고 해 놓고, 주말 내둥 잠을 자 버렸군요.

대충 만들어 뒀던 녀석을 걍 압축해서 올립니다. (이거 뭐.. 심하게 무책임한데..;;)

핵심 코드는 다음과 같습니다.
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 라고 주석이 붙은 부분이 보일텐데,
이는 이미지 파일(첨부한 이미지 파일 참조)에서 캐릭터의 움직임이 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
이글루스 가든 - 게임 프로그래머 되기

트랙백

이 글과 관련된 글 쓰기 (트랙백 보내기)
TrackbackURL : http://handmade.egloos.com/tb/5075448 [도움말]

덧글

덧글 입력 영역