본문 바로가기
WinAPI/[갠플] Relic Hunters Zero 모작

2021-09-17/Relic Hunters Zero 모작 일지

by GameStudy 2021. 9. 17.

1. 마우스 커서 변경
  1-1. FPS의 크로스헤어 느낌의 마우스 커서로 변경
    - 결국 마우스 기존 커서를 보이지 않게하고,

      해당 위치에 내가 원하는 이미지가 떠다니면 됨.

 

    - 따라서, 시작 화면에서는 기존 커서를 쓰고

      전투가 시작되는 Stage1 Scene에서부터 크로스헤어의

      마우스로 전환되게끔 하기 위해서

      Intro Scene이 아닌 다음 씬의 init()에서 코드 작성.

// SceneStage1.cpp

...

bool UIWindowMain::init()
{
	ShowCursor(FALSE);
	UIWidgetImage* pMouseImage = createWidget<UIWidgetImage>(L"Mouse");
	pMouseImage->setImageTexture(L"Mouse", L"spr_crosshair_0.bmp", TEXTURE_PATH);
	pMouseImage->setImageTextureColorKey(255, 0, 255, 0);

	return true;
}

...

    - 마우스가 그려질 때는 아래와 같이 중점에서 그려지게끔 구현.

// UIWidgetMouse.cpp

...

void UIWidgetImage::render(HDC _hDC)
{
	if (nullptr != m_pTexture)
	{
		Vec vPos = m_vPos + m_pOwnerWindow->getUIWindowPos();
		if (m_pTexture->getObjName() == L"Mouse")
		{
			Vec vMousePos = Input::getInst()->getMouseCurPos();
			Vec vScale = Vec(42.f, 42.f);
			vPos.x = vMousePos.x + vScale.x / 2.f ;
			vPos.y = vMousePos.y + vScale.y / 2.f ;
		}
		m_pTexture->render(_hDC, vPos, Vec(0.f, 0.f), m_vScale);
	}
}

...

2. 리스폰 클래스 구현

  2-1. 리스폰 클래스

    - 플레이어는 죽었다가 살았을때, 몬스터는 리젠될 때

      이 리스폰 클래스 개체가 있는 곳에서 스폰되게끔 

      구현 해 보고자 함.

 

    - 가장 먼저 애니메이션에 쓰일 아틀라스 이미지를 만들자.

      추출한 텍스쳐, png 이미지를 여기에서 마젠타가 낀 bmp로

      변경 해 줌. 그리고 텍스쳐 패커로 아틀라스 이미지 생성.

 

    - Object 클래스를 상속 받는 SpawnPoint 클래스 생성

      위치는 Object 폴더로 지정.

 

  2-2. 리스폰 위치 변경 가능

    - 2번키를 누르면 해당 플레이어 자리에 리스폰 개체 생성

      Y축 Sort를 통해서 탑뷰에서도 자연스럽게 보이게끔 함.

 

3. 애니메이션 예외처리 구현
  3-1. 애니메이션이 원하는 때에 정확히 나오지 않는 문제 발생

    ex. 피격 당했는데도 Hit 애니메이션이 안나옴. 죽었는데도 Die 애니메이션이 안나옴.
    애니메이션 체인지를 총괄하는 코드가 필요할듯.

 

  3-2. 문제점 파악

    - 프로그램의 업데이트 사이클(init->update->postUpdate->render)

      내에서 애니메이션 모션 체인지가 동기화 되지 않음.

      즉, 한 사이클 내의 어느 순간에도 모션체인지가 일어날 수 있음.

 

    - 엔진 구조를 바꿔보고자 했으나, 한계가 있음.

      필자는 다른사람과의 약속과도 같은 이 "구조"를

      깨트린다면 커뮤니케이션이 불가능하다고 생각함.

      또한 기존 엔진 구조에 의존적인 코드가 많아서,

      전체적인 리팩토링이 불가피함.

 

    - 결론적으로 예외처리 형식을 채택함.

      맞는 방식인지는 잘 모르겠음..! 

      어느정도 찾아보니, 예외처리가 엄청나게 나쁜 코드는 아닌듯함.

 

  3-3. 플로우 차트 작성

    - 애니메이션의 종류를 모두 적고, 플로우 차트를 그려 봄.

      IDLE, WALK, SKILL, HIT, DIE, RESPAWN으로 나눠짐.

 

    - 예외처리를 통해서 플로우 차트에 그린 경우의 수들을 구현함.

 

    - DX11 2D에서는 동기화에 대한 갈망이 생길듯..

 

댓글