전체 글

WIN32API FrameWork/한단계씩 직접 구현

63. 위젯 컴포넌트

http://hyrule.tistory.com/111 *** 공부 방법 *** 1. 코딩을 해야 하는 부분은 첫 부분에 변수나 함수, 메소드에 대한 선언이 코드블럭으로 표시되어 있다. //ex) MakeFunction(); 2. 코드블럭 하단에는 해당 선언에 대한 구현 로직이 작성되어 있다. 처 hyrule.tistory.com class CWidgetComponent: public CWidgetWindow; - 여태까지는 게임오브젝트를 따라다녀야 하는 위젯들은 손수 주소를 받아서 위치를 구했었다. - 그런데 위젯은 종종 게임오브젝트를 따라다닌다 -> 아예 이걸 미리 설정해놓은 '위젯 컴포넌트'를 만들면 편할 것이다. - CWidgetWindow 클래스를 상속받아 조금 개조해서, CGameObject에서..

WIN32API FrameWork/한단계씩 직접 구현

62. 숫자 이미지 위젯

http://hyrule.tistory.com/111 *** 공부 방법 *** 1. 코딩을 해야 하는 부분은 첫 부분에 변수나 함수, 메소드에 대한 선언이 코드블럭으로 표시되어 있다. //ex) MakeFunction(); 2. 코드블럭 하단에는 해당 선언에 대한 구현 로직이 작성되어 있다. 처 hyrule.tistory.com class CNumber: public CWidget { CSharedPtr m_NumberImage} - 각 숫자에 출력할 이미지 저장 - 스프라이트 좌표를 통해 다른 부분을 출력하거나, 프레임 번호에 따라 다른 이미지를 출력해야 하므로 - 해당 정보가 들어있는 클래스인 CAnimationSequence를 사용한다. { int m_Number } - 출력하고싶은 숫자 저장 < ..

WIN32API FrameWork/한단계씩 직접 구현

61. 폰트

http://hyrule.tistory.com/111 *** 공부 방법 *** 1. 코딩을 해야 하는 부분은 첫 부분에 변수나 함수, 메소드에 대한 선언이 코드블럭으로 표시되어 있다. //ex) MakeFunction(); 2. 코드블럭 하단에는 해당 선언에 대한 구현 로직이 작성되어 있다. 처 hyrule.tistory.com [ 사전 지식 ] - 인자로 들어온 주소에서 폰트 파일을 로드한다. - 이렇게 로드한 폰트는 밑의 CreateFontIndirect() 또는 CreateFont() 함수를 사용해 특정 HDC에서 사용하도록 지정해 줄 수 있다. - 로드 가능한 폰트 확장자 및 자세한 내용은 MSDN을 참고 https://docs.microsoft.com/en-us/windows/win32/api/..

WIN32API FrameWork/한단계씩 직접 구현

60. 프로그레스 바

http://hyrule.tistory.com/111 *** 공부 방법 *** 1. 코딩을 해야 하는 부분은 첫 부분에 변수나 함수, 메소드에 대한 선언이 코드블럭으로 표시되어 있다. //ex) MakeFunction(); 2. 코드블럭 하단에는 해당 선언에 대한 구현 로직이 작성되어 있다. 처 hyrule.tistory.com [ 오류 해결 ] - CEffect 클래스의 Render Layer이 Default로 되어있던 문제 수정. -- 생성자에서 변경해 주었음. 더보기 CEffect::CEffect(): m_Duration(0.f), m_Time(0.f), m_EffectType(EEffectType::Once) { m_RenderLayer = ERenderLayer::Effect; } - CScen..

WIN32API FrameWork/한단계씩 직접 구현

59. 마우스에 애니메이션 띄우기

http://hyrule.tistory.com/111 *** 공부 방법 *** 1. 코딩을 해야 하는 부분은 첫 부분에 변수나 함수, 메소드에 대한 선언이 코드블럭으로 표시되어 있다. //ex) MakeFunction(); 2. 코드블럭 하단에는 해당 선언에 대한 구현 로직이 작성되어 있다. 처 hyrule.tistory.com [ 사전 지식 ] - 클라이언트 영역의 좌표를 구한다. class CInput - 이미 어떤 객체에 텍스처 이미지 파일이나 애니메이션을 출력하는 기능은 CGameObject에 모두 구현되어 있다. - 그러므로 여기서 기능을 떼다가 마우스를 만들면 어렵지 않게 출력이 가능하다. - CGameObject의 friend class로 ..

WIN32API FrameWork/한단계씩 직접 구현

58. 버튼 완성

http://hyrule.tistory.com/111 *** 공부 방법 *** 1. 코딩을 해야 하는 부분은 첫 부분에 변수나 함수, 메소드에 대한 선언이 코드블럭으로 표시되어 있다. //ex) MakeFunction(); 2. 코드블럭 하단에는 해당 선언에 대한 구현 로직이 작성되어 있다. 처 hyrule.tistory.com [ 사전 지식 ] DestroyWindow(HWND) - WM_DESTROY 메시지를 발생시킨다 -> WIN32API 창을 종료시킨다. class CInput { bool MouseLDown, MouseLPush, MouseLUp } - 이제 버튼에 대한 마우스 클릭을 처리해주어야 하므로 해당 변수들을 추가한다. 생성자에서 false로 ..

WIN32API FrameWork/한단계씩 직접 구현

57. 위젯의 마우스 충돌

http://hyrule.tistory.com/111 *** 공부 방법 *** 1. 코딩을 해야 하는 부분은 첫 부분에 변수나 함수, 메소드에 대한 선언이 코드블럭으로 표시되어 있다. //ex) MakeFunction(); 2. 코드블럭 하단에는 해당 선언에 대한 구현 로직이 작성되어 있다. 처 hyrule.tistory.com [ 변경 사항 ] class CWidgetWindow { m_Pos -> m_PosLT } - 이 클래스의 위치 변수는 창 좌측 상단의 위치를 저장하는데, 여타 클래스들의 m_Pos와 똑같이 써 버리면 혼동이 올 수도 있을 것 같아 m_PosLT로 변수 이름을 변경하였음. class CScene; - m_Visibility ..

WIN32API FrameWork/한단계씩 직접 구현

56. 위젯

http://hyrule.tistory.com/111 *** 공부 방법 *** 1. 코딩을 해야 하는 부분은 첫 부분에 변수나 함수, 메소드에 대한 선언이 코드블럭으로 표시되어 있다. //ex) MakeFunction(); 2. 코드블럭 하단에는 해당 선언에 대한 구현 로직이 작성되어 있다. 처 hyrule.tistory.com class CWidgetWindow - 위젯을 담고있을 큰 창 - CScene 외에는 접근 불가(friend 처리) { class CScene m_Scene } { int ZOrder } { std::vector m_vecWidget } {..

WIN32API FrameWork/한단계씩 직접 구현

55. 사운드

http://hyrule.tistory.com/111 *** 공부 방법 *** 1. 코딩을 해야 하는 부분은 첫 부분에 변수나 함수, 메소드에 대한 선언이 코드블럭으로 표시되어 있다. //ex) MakeFunction(); 2. 코드블럭 하단에는 해당 선언에 대한 구현 로직이 작성되어 있다. 처 hyrule.tistory.com - 사운드 시스템은, WIN32API에서 기본으로 지원하는 시스템을 사용할 수 있다. 다만 wav 파일만 재생할 수 있어 효율성이 떨어진다. 그러므로, 외부 사운드 라이브러리를 링크하여 사용하는게 더 낫다. - 외부 사운드 라이브러리인 FMOD를 사용하여 사운드를 출력해보자. 다운로드는 여기서 받을 수 있다. https://www.fmod.com/ FMOD The sonic un..

WIN32API FrameWork/한단계씩 직접 구현

54. 마우스 충돌 - 픽셀 충돌

http://hyrule.tistory.com/111 *** 공부 방법 *** 1. 코딩을 해야 하는 부분은 첫 부분에 변수나 함수, 메소드에 대한 선언이 코드블럭으로 표시되어 있다. //ex) MakeFunction(); 2. 코드블럭 하단에는 해당 선언에 대한 구현 로직이 작성되어 있다. 처 hyrule.tistory.com [ 사전 지식 ] #include std::sort(m_vector.begin(), m.vector.end(), CClass::SortY()); - algorithm에 포함되어 있는 정렬 알고리즘 함수, sort() -- 리스트는 자료구조 클래스 자체에 sort 기능이 내장되어 있었지만, vector의 경우 sort 기능이 없다. - 원하는 구간의 시작, 끝 지점 iterator..

WIN32API FrameWork/한단계씩 직접 구현

53. 마우스

http://hyrule.tistory.com/111 *** 공부 방법 *** 1. 코딩을 해야 하는 부분은 첫 부분에 변수나 함수, 메소드에 대한 선언이 코드블럭으로 표시되어 있다. //ex) MakeFunction(); 2. 코드블럭 하단에는 해당 선언에 대한 구현 로직이 작성되어 있다. 처 hyrule.tistory.com [ 사전 지식 ] POINT PTMouse; GetCursorPos(&PTMouse); ScreenToClient(hWnd, &PTMouse); - POINT: 구조체. (long)x, (long)y 를 들고 있는 단순한 구조체이다. 마우스의 좌표는 이 구조체에 받는다. - GetCursorPos(&PTMouse): 마우스의 '스크린 좌표계' 를 받아온다. 모니터의 맨 왼쪽 위 ..

WIN32API FrameWork/한단계씩 직접 구현

52. 박스-원 충돌

http://hyrule.tistory.com/111 *** 공부 방법 *** 1. 코딩을 해야 하는 부분은 첫 부분에 변수나 함수, 메소드에 대한 선언이 코드블럭으로 표시되어 있다. //ex) MakeFunction(); 2. 코드블럭 하단에는 해당 선언에 대한 구현 로직이 작성되어 있다. 처 hyrule.tistory.com - 사각형과 원의 충돌 판정이 의외로 복잡하다. - 우선 사각형의 변에 닿는 경우는, 원의 가운데 점이 사각형의 한 변의 끝에서의 거리보다 가까우면 충돌이다. --> 쉽게 말해서, 사각형의 크기를 반지름만큼 확장해주고 그 안에 원의 중심점이 들어오게 되면 충돌이라는 것이다. - 문제는 대각선이다. - 대각선은, 점이 확장한 사각형 안에 들어와도 충돌이 아니기 때문에, 이 경우를 ..

hyrule
C++ 프로그래밍 공부