일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 백준
- 배열
- CS
- Programming
- 문법
- 연산자
- Javascript
- Visual Studio
- c++
- Direct2D
- 알고리즘
- 이지스퍼블리싱
- Kotlin
- 함수
- 리뷰
- doit코틀린프로그래밍
- Tips강좌
- tipssoft
- 김성엽
- Desktop
- Windows
- c
- Win32
- c#
- VS ERROR
- 포인터
- 티스토리
- Tips프로그래밍강좌
- 지식나눔강좌
- 프로그래밍
- Yesterday
- Today
- Total
목록DEV (265)
F.R.I.D.A.Y.
바로 전 시리즈에선 바닥 구현을 했습니다. 좌우로만 이동하면 이제 제대로 된 캐릭터 이동이 가능해지겠네요. 프로젝트 업데이트 이번 포스트부터는 기존 제공한 프로젝트와 해당 프로젝트로 구성한 중력구현 등을 포함한 버전의 새로운 프로젝트를 사용합니다. 프로그램 사용이 보다 접근성이 높아야 흥미를 느낄 수도 있을것 같아 몇가지 기능을 추가했으니 참고해주세요. 본 파일에 추가된 기능/소스코드는 다음과 같습니다. 마우스 좌측버튼 및 마우스 끌기로 블럭 형성이 가능합니다.[# 이렇게 만들어진 블럭에 대해서도 중력 구현 및 충돌의 영향을 받도록 구성해 캐릭터가 그 위에 놓였을 때 더이상 내려가지 않습니다] 마우스 우측버튼으로 형성된 블럭을 삭제할 수 있습니다.[# 프로그램 생성부터 나온 하단의 메인 블럭은 지우지 않..
이전 시간에는 캐릭터가 바닥을 만났을 때, 더이상 아래로 내려가지 않도록 했습니다. 이번에는 점프를 구현해보겠습니다. 점프 구현 단순히 만들면 그냥 키 입력을 받았을 때 이동속도로 음수(-)값을 주면 됩니다. 근데, 이러면 다시 점프가 가능해지죠. 그래서 우리는 키 상태를 저장하고 실 계산은 Calculate 메서드에서 처리하도록 구성할겁니다. 키 상태를 저장하는 방법은 아래 포스트를 참고하세요. Win32 - 키보드 입력으로 사각형 움직이기 키보드 입력으로 사각형을 움직여봅니다. # Win32 프로그래밍을 이해하고 있어야합니다. # 알지 못하는 경우 여기에서부터 시작할 것을 권장합니다. # 본 문서는 Direct2D 기반으로 구현합니다. Win3 pang2h.tistory.com 위 페이지의 정보대로 ..
이전 시간의 중력 구현에 이어 이번에는 지나갈 수 없는 벽을 구현해봅니다. 벽 물리엔진을 구성하다보니 주로 게임에 빗대는 경우가 많은데, 벽이라 함은 물체가 뚫고 지나갈 수 없는 것을 말하죠. 우리가 윈도우에 사각형을 그려넣는다고 그 사각형이 바로 벽이 되지는 않습니다. 연산을 통해 벽으로 인식되는 사각형을 대상이 뚫고 움직이지 못하도록 해야하죠. 이전 시간에 우리는 중력을 구현했기 때문에 중력이 적용된 시스템으로 구현해볼 것입니다. 중력을 구현한 방식과 중력을 구현하지 않은 방식은 약간의 차이가 존재하니까요. 접근 대상이 벽에 접근할 때는 네가지 방향에서 접근할 수 있습니다. 그리고 네 방향을 모두 점검하는 것은 좋지 않죠. 따라서 우리는 각 방향의 접근을 알아내고 그에 맞게 코드를 작성하겠습니다. 그..
이전 포스트의 마지막 부분에서 문제점 하나를 언급했었죠, 이번 포스트에서는 그 문제점을 해결하는 방법을 풀어봅니다. # Direct2D를 활용합니다. 문제점 이전 포스트에서 만든 프로그램의 문제는 다음과 같았습니다. 바닥에 닿지 않았는데 초기 위치로 돌아가버린다 이 문제는 언급했듯이, 이동 속도가 남은 공간보다 커서 공간을 넘어서다보니 초기 위치로 돌아가도록 명령이 실행됐기 때문입니다. 문제 해결하기 문제점에서 언급한 것처럼 그럼 이동 속도를 조절해주면 되겠네요. 첫 번째 if 구문은 현재 위치에 대한 판단을, 두 번째 if는 다음 위치에 대한 판단을 통해 이동 속도를 조절합니다. 두 if 구문 중 하나만 실행하면 되므로 else 로 묶어서 속도 향상을 꾀합니다. if (rcCenter.y + rcSiz..
지구에서는 지구 중력의 영향으로 물체를 공중에 놓으면 바닥으로 떨어집니다. 이런 식으로 중력에 영향을 받는 듯한 코드를 작성해봅니다. # Direct2D를 활용합니다. 기본 코드 기본 코드는 아래의 압축파일을 기준으로 합니다. 프로젝트 내 baseWin.h에 오류가 있습니다. 프로젝트 기준 baseWin.h > BaseWindow 클래스 > static WindowProc 함수에서 (LONG)을 (LONG_PTR)로 변경시 오류가 사라집니다. static LRESULT CALLBACK WindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { DERIVED_TYPE* pThis = nullptr; if (uMsg == WM_NCCREATE) { C..
키보드 입력으로 사각형을 움직여봅니다. # Win32 프로그래밍을 이해하고 있어야합니다. # 알지 못하는 경우 여기에서부터 시작할 것을 권장합니다. # 본 문서는 Direct2D 기반으로 구현합니다. Win32만 알아도 이해하는데 큰 무리는 없습니다. 객체 이동 키보드 이동으로 객체 이동을 한 번 구현해보겠습니다. 일반적으로 키보드 조작으로 객체 이동을 구현한다고 하면 아래와 같이 구현을 할 것입니다. 키 코드 명령 VK_LEFT 객체.x - offset VK_UP 객체.y - offset VK_RIGHT 객체.x + offset VK_DOWN 객체.y + offset LRESULT MainWindow::OnKeyDown(WPARAM key) { switch (key) { case VK_LEFT: cur..
게임이란 현대 기술의 정점을 모두 포함하고 있는 기술의 정수다 문득 이런 구절이 떠오르는 포스트가 아닐까 생각합니다. 누가 말했는지는 몰라도 정말 한번에 와 닿는 말이 아닐 수 없습니다. RPG에서만 보더라도 다양한 물리 법칙이 적용된 엔진[# 유니티와 언리얼이 대표적이죠]이 사용되고, FPS 게임에서는 심지어 탄도학도 이용[# 단순히 배틀그라운드 탄도학만 검색해도 나오는 글이 수 십 개...]합니다. 게임에서 중요한 것 중 하나가 막혀 있는 곳을 가지 못하는 것이라 생각합니다. 생각해보세요. 현실에서 물건을 짚으려 손을 뻗었는데 짚이기는 커녕 그 물건을 통과해버린다면. 아마도 기절하지 않을까요? 그래서 게임에서는 물리 엔진을 사용합니다. 사실 게임에만 사용한다기보단, 여러 산업 전반에서 사용하고 있죠...
게임이란 현대 기술의 정점을 모두 포함하고 있는 기술의 정수다 문득 이런 구절이 떠오르는 포스트가 아닐까 생각합니다. 누가 말했는지는 몰라도 정말 한번에 와 닿는 말이 아닐 수 없습니다. RPG에서만 보더라도 다양한 물리 법칙이 적용된 엔진[# 유니티와 언리얼이 대표적이죠]이 사용되고, FPS 게임에서는 심지어 탄도학도 이용[# 단순히 배틀그라운드 탄도학만 검색해도 나오는 글이 수 십 개...]합니다. 게임에서 중요한 것 중 하나가 막혀 있는 곳을 가지 못하는 것이라 생각합니다. 생각해보세요. 현실에서 물건을 짚으려 손을 뻗었는데 짚이기는 커녕 그 물건을 통과해버린다면. 아마도 기절하지 않을까요? 그래서 게임에서는 물리 엔진을 사용합니다. 사실 게임에만 사용한다기보단, 여러 산업 전반에서 사용하고 있죠...
Direct2D에서 그래픽 변형을 가할 수 있는 SetTransform 메서드 그래픽 변형 그래픽 변형이라 함은 아래의 것들이 있습니다. 크기 조절 회전 반전 이동 이러한 항목들은 WIC 컴포넌트에서도 구현할 수 있지만, 그 속도가 느립니다. 만일 그리기 위한 그래픽 변형을 한다면 Direct2D에서 제공하는 SetTransform 메서드를 이용하는 것이 좋습니다. SetTransform SetTransform 메서드는 그래픽 변형을 가하는 메서드로서, 두 개의 오버로드가 존재합니다. 여기에서는 레퍼런스 참조를 통한 메서드를 기본으로 합니다.[# 레퍼런스 참조를 하는 메서드는 아마도 어드레스 참조를 하는 메서드를 이용해 구현했겠죠.] 메서드 원형 void SetTransform( const D2D1_MA..
이미지를 회전하거나 반전시킬 수 있는 IWICBitmapFlipRotator IWICBitmapFlipRotator 이미지를 회전하거나 반전시킬 수 있는 인터페이스입니다. 단점 먼저 구현 및 시연을 하기 전에 단점을 들자면, 기준에 맞추어 원하는 각도로 변형은 불가능합니다. 애초에 WIC가 Windows Imaging Component의 약자로, 불러오기 및 저장하기가 주된 목적이기 때문입니다. 따라서 만일 90°의 배수로 이미지를 회전시키는 경우가 아니라면 IWICBitmapFlipRotator 객체는 사용할 수 없습니다. 이미지 반전의 경우 상하, 좌우 변형만 가능합니다. 구현 IWICBitmapFlipRotator의 구현은 IWICImagingFactory에서 할 수 있습니다. IWICImaging..