본문 바로가기
개발일지/2023_GameProgramming(Team)

[2023_GameProgramming(Team)] WINAPI에서 폰트 바꾸기, Text 하나하나 나오도록 만들기

by DDongYeop 2023. 11. 30.
728x90

 

사실 폰트 하나 바꾸는건 간단했다. 

AddFontResource(TEXT("Orbit Regular.ttf"));
HFONT currentFont = CreateFont(50, 0, 0, 0, 0, 0, 0, 0, HANGEUL_CHARSET, 0, 0, 0, VARIABLE_PITCH | FF_ROMAN, TEXT("Orbit Regular"));
HFONT oldFont = (HFONT)SelectObject(_dc, currentFont);
SelectObject(_dc, oldFont);

 

 

위처럼 4출만 있고, 2번째 SelectObject하기 전에 Text를 출력하면 끝이다. 

 

 

근데 뭔가 안 바뀌더라 다름 아니라... 

TTF파일 열고 폰트 다운 받는 곳의 이름과 파일 탐색기에 써 있는 이름이 다른데, 파일 탐색기에 있는 이름으로 해서 그랬다. 

다음엔 폰트 이름 잘 확인해야지.... 

 

 

근데 여기서 다른 문제가 생겼다 !

 

아래처럼 잘 적용되어있던 폰트가 

 

 

대략 10초정도 런타임한 이후 폰트 적용이 풀려버리더라.. 

 

 

그래서 진짜 오래 고민해보고, 도저히 모르겠어서 선생님께 한번 질문 드려봤는데..

 

 

해결 방법 너무 잘, 빠르게, 친절하게 !! 알려주셔서 바로 적용해보니 너무 잘 적용이 되고 안 풀리더라 !!!!

선생님 ㅜㅜㅜ 감사합니다. 덕분에 너무 잘 폰트적용이 돼요 !!! 너무너무 감사합니다 !!!!! ❤️❤️❤️

 

 

또 프래임워크에 들어있던 deltaTime을 이용하여 TEXT가 천천히 나오게 해주는 것도 만들어주었다. 

하나하나 나오는게 뭔가뭔가 신기하더라 !! 

void Text::Update()
{
	m_fCurrentTime += fDT;
}

void Text::Render(HDC _dc)
{
	if (m_fCurrentTime >= m_fPrintTime)
	{
		m_fCurrentTime -= m_fPrintTime;
		if (m_sFrontText.size() != 0)
		{
			if (m_sPrintText.size() < m_sFrontText.size())
				m_sPrintText += m_sFrontText[m_sPrintText.size()];
		}
		else if (!m_qPrintQueue.empty())
		{
			m_sFrontText = m_qPrintQueue.front();
			m_qPrintQueue.pop();
		}

	}
}

 

 

마지막으로 다음 TEXT로 넘기는 것과 남은 것들 생성하는걸 만들어주면 !

void Text::Update()
{
	if (KeyMgr::GetInst()->GetKey(KEY_TYPE::SPACE) == KEY_STATE::DOWN)
	{
		if (m_sPrintText.size() == m_sFrontText.size())
		{
			m_sFrontText = m_qPrintQueue.front();
			m_qPrintQueue.pop();
		}
		else
		{
			m_sPrintText = m_sFrontText;
		}
	}
}

 

 

 

짜짠 완성이당 !

 

 

선생님 편한 프레임워크 만들어주셔서 감사합니당 !!! 

너무 편해요 !!!!!

728x90

댓글