일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Kotlin
- Tips강좌
- 배열
- Visual Studio
- tipssoft
- VS ERROR
- Desktop
- Win32
- Javascript
- 포인터
- 김성엽
- 이지스퍼블리싱
- 함수
- Windows
- 프로그래밍
- c#
- 리뷰
- c++
- Direct2D
- 티스토리
- 백준
- 문법
- 지식나눔강좌
- CS
- 연산자
- 알고리즘
- doit코틀린프로그래밍
- Programming
- Tips프로그래밍강좌
- c
- Yesterday
- Today
- Total
목록engine (6)
F.R.I.D.A.Y.
물리엔진 - 벽 충돌 part1. 바닥 구현 이전 시간의 중력 구현에 이어 이번에는 지나갈 수 없는 벽을 구현해봅니다. 벽 물리엔진을 구성하다보니 주로 게임에 빗대는 경우가 많은데, 벽이라 함은 물체가 뚫고 지나갈 수 없는 것을 pang2h.tistory.com 위 시리즈와 연계해 작성합니다. 프로젝트 코드는 다음에서 이어집니다. 좌우 벽 충돌 플래시 게임 등에서 바닥을 형성한 것 외에 추가로 구현한 것이 있습니다. 좌우로 벽을 만났을 때 캐릭터가 이동하지 못하도록 하는 것입니다. 이것 또한 Calculate 메서드에서 처리하면 구현할 수 있습니다. 과 방향만 다르지 동일한 내용이기 때문에 해당 코드를 참고해 역으로 계산하면 수비게 코드를 작성할 수 있습니다. 또한, 좌우 이동은 서로 상반된 명령이기 때..
바로 전 시리즈에선 바닥 구현을 했습니다. 좌우로만 이동하면 이제 제대로 된 캐릭터 이동이 가능해지겠네요. 프로젝트 업데이트 이번 포스트부터는 기존 제공한 프로젝트와 해당 프로젝트로 구성한 중력구현 등을 포함한 버전의 새로운 프로젝트를 사용합니다. 프로그램 사용이 보다 접근성이 높아야 흥미를 느낄 수도 있을것 같아 몇가지 기능을 추가했으니 참고해주세요. 본 파일에 추가된 기능/소스코드는 다음과 같습니다. 마우스 좌측버튼 및 마우스 끌기로 블럭 형성이 가능합니다.[# 이렇게 만들어진 블럭에 대해서도 중력 구현 및 충돌의 영향을 받도록 구성해 캐릭터가 그 위에 놓였을 때 더이상 내려가지 않습니다] 마우스 우측버튼으로 형성된 블럭을 삭제할 수 있습니다.[# 프로그램 생성부터 나온 하단의 메인 블럭은 지우지 않..
이전 시간에는 캐릭터가 바닥을 만났을 때, 더이상 아래로 내려가지 않도록 했습니다. 이번에는 점프를 구현해보겠습니다. 점프 구현 단순히 만들면 그냥 키 입력을 받았을 때 이동속도로 음수(-)값을 주면 됩니다. 근데, 이러면 다시 점프가 가능해지죠. 그래서 우리는 키 상태를 저장하고 실 계산은 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..