지금 Window에서 실행될 프로그램을 만드는 것이다.내가 만든 프로세스 (다른말로 프로그램)이 "실행" 된다는 것은당연히 OS (Window 운영체제) 안에서 실행이 되는 것이다.컴퓨터가 켜저서 가장먼저 "메모리"를 점유하는 것은"운영체제 프로그램"이다.제일먼저 실행
hAccelTable여기서 중요한게 GetMessage, TranslateMessage, DispatchMessage이다.프로세스 안에 '메세지 큐'라는게 있다.스택은 마지막에 넣은게 제일 먼저 나오고큐 같은 경우에는 먼저 넣어준 데이터가 먼저 나옴.내가 실행시킨 프로
WinAPI를 배우면 다른 운영체제안드, IOS도 이것을 공부하면서 공부하는 방법도 배우기때문에금방배울 수 있다는 자신감을 가져라.여기서 윈도우 창을 만들고그리고 반복문을 돌면서 메세지들을 처리를한다.(메세지 반응 큐)그중에서도 메세지가 발생을 하면은 WM_PAINT라
HPEN - CreatePen() 인자를 뭘 주어야할지 잘 모르겠다. => 바로 구글링 아 뭐 첫번째 인자값으로 이런거~ 두번째는 int 두깨 세번째는 RGB메크로? (그냥 함수? 말하는듯) ![](https://velog.velcdn.com/images/
물체가 여러개있고 존나 움직일때WM_PAINT가 반복적으로 일어나야한다.그래서 곂칠수도있고해서 다른 물체들 영향 받는다.그 물체 하나가 움직였기 때문에그 물체의 색상값들을 지워야함.(픽셀 메모리 255 255 255?)그래서 게임이라는 것은 매순간순간 렌더링 해주어야한
메세지 유무와 관계없이 반환현재 우리 프로그램이 메세지에만 반응할 수 밖에 없는 가장 큰 원인이'GetMessage' 함수 때문.'GetMessage'메세지 큐에서 '메세지' 꺼내오는데함수가 언제까지 대기를 하나 메세지 큐에 메세지가 들어올 때까지 대기함.이것을 해결할
객체의 생성을 하나로 제한언제어디서든 쉽게 접근이 가능해야함.extern? => ㄴㄴ.다른데서도 객체를 만들 수 있다. -> 방지를 못함.'강제성'이 없음.그래서 방법중 하나가 '생성자'를 숨기는 것이다.이렇게하면 외부에서 객체를 못 만든다.그런데 문제가 extern선
정적 멤버 함수를 만들어서 '객체'없이 접근이 가능하도록 하고정적 멤버 함수 내부에 정적 멤버 변수(객체)를 만든다. => '데이터'영역에 올라감 ㅇㅇ.또한 이 객체는 정적 멤버 함수만으로만 접근이 가능함.core의 주소를 반환한다.싱글톤보다 엄청 간단하노.정적 멤버
우리가 지정한 해상도로 바꿔줄 것인데이게 지금 타이틀 창, 메뉴바 다 포함한 것이다.윈도우 버젼에 따라서 크기가 달라진다.코드는 같아도.윈도우 버젼마다 스타일이 다른데 어떻게 다 대응함?이것을 적응 시켜주는 크기를 잡아주는 함수가 있음.WS_OVERLAPPENDWIND
컴퓨터의 속도가 엄청나게 빠르다는 점을 간과했다. 초당 4만 픽셀로 움직일 것이다. 컴퓨터 성능이 좋은 사람은 더 빨리 움직이고 컴퓨터 성능이 조금 안 좋으면 느리게 움직일 것이다. 일단 이게 '정수'값이면 안된다.우리 회면은 잘게 쪼개진 '픽셀'인데0.1픽셀이라는
매번 update할 때마다 한 프레임에 걸린 시간을 구할 것이다.ctimeManger에서매번 update돌때마다 '한 프레임에 걸린 시간' 구할 것이다.'한 프레임 호출되는데 걸리는 시간'이 update가 매번 들어오기 때문에현재 카운트 값을 다시 계산을 하고Quard
render함수 개선 ㄱㄱ.물체가 많아지고 그러다 보면은 우리가 싹다 이렇게 100만개 넘는 픽셀을 다지우고 사각형 그리고 이 짓을 초당 2만번 수행하는 중이다.이러면 어느 시점에는 사각형이 보였다가 안보였다가 하는 깜빡이는 현상이 발생한다.그리는 순가간을 봤을 수도
키 입력 처리를 할 것이다.포커싱 되어있지 않으면 입력 무시하고 그런것들...update함수안에서 if로 체크함.매순간순간마다 update호출한다.이렇게 update가 끝나면 화면에 변경점들을 render함수를 통해 그려낼 것이다.이과정이 1 frame의 과정이다. 이
현재 키입력 하는 부분까지 하고현재 윈도우가 포커싱이 되었을 경우에만 키입력이 되도록 구현할 것이다.만약 내가 누르고 있는 상태에서 창이 밑으로 (최소화되어서) 내려가거나 그럴 경우에는?내가 키가 눌렷다가 때질때 뭔가 해놓기로 했는데 창이 중간에 포커싱이 변경되었다고
CScene클래스 만들고 안에서 클래스 '전방선언'그러면 Scene의 멤버 변수로 사용못한다. => 구체적인 정보가 없기 때문에얼마만큼 데이터 크기를 잡아서 메모리에 올릴래?? ㅇㅋ?? ㅇㅋ.그래서 포인터밖에 사용못한다. => 포인터 밖에 사용못한다? => 메모리에 크
지금 살짝 이해가 안되었던 부분이 뭐냐하면은여기서 지금 화면 clear하는 부분인데 왜 사각형을 그리는데 화면을 clear하냐?Rectangle함수 자체가 1픽셀로 사각형 그리는데 안은 흰색으로 채우기 때문이다.흰색으로 채운다음에 \_memDC로 사각형 가운데다가 그리
유니티 프젝에서 진행하는 것처럼 부모에는 구현만 해놓고 자식이 알아서 뭐 하게 해야함.그런데 지금은 winAPI이기 떄문에 각 물체가 update를 호출하는 방식이여야한다.그래서 update 함수를 가상함수로 만들어야 하는 것 까지 ㅇㅋ.또한 나는 CObject는 부모
미사이클 클래스 만든다.선언부는 이렇게, 구현부는이따위로 해준다.이번 시간에 눈여겨 봐야 할점이 매크로 재활용 하는 부분이다.처음에 KEY_CHECK 하나만 있었다면player의 if문이매크로를 재활용 하는 느낌으로다가 이렇게 해준다면 이제는이렇게 줄일 수 있다. (빨
내가 지금 부여한 id에 따라서현재 x, y축으로 이동하게 했다.600.f 라는 값 자체가 이동속도의 개념으로 정의해놓은것이다.이렇게하면 초당 600을 이동을 할까?만약 초당 1이라는 값을 이동하고 싶다면은 (1초에 1만큼)한프레임에는그림의 네모칸 프레임(한 프레임)
Resource또한 상속 구조로 만들어준다.1) id2) 상대경로 pathTexture든 Sound드든 공통적으로 resource들이 가져야할 것은 '키'값이다.리소스만의 고유한 id라고 생각해라 (문자열로)절대경로는 언제든지 달라지지만 저 밑줄친 부분은 바뀌지 않는다
Path Manager 이게 이미지임. Load함수 호출을 하면 이제 path에 해당하는 이미지를 메모리상에 올리고 올라간 것을 bitMap id로 가르켜야한다. 가르킨다는 것은 포인터가 아니라 윈도우에서 제공하는 커널 오브젝트이기 때문에 id를 받아와서 오브
우리가 Blink 현상 제거를 할려고Bitblt함수를 사용하여 다른 비트맵에 먼저 싹다 그린다음에BitBlt함수를 사용하여 메인 윈도우에 그리는 식으로 진행을 했다.이렇게 전체 복사를 했다.근데 우리가 비트맵에 그릴려는 것은 작은 픽셀 덩어리 이다.이 픽셀 데이터를 싹
먼저 include 해준다 맵을지금 해당 부분을 주석처리를 하면 에러가 뜨는데using을 알아보도록 하자.std표준 라이브러리에 있는 함수들(기능들) std 라는 네임 스페이스 안에 포함되어 있다.std::cout <<, std::cin >> 이런식으로 사용
Scene에 있는 물체들 끼리의 충돌검사를 할 것인데이게 쉽지만은 않다.충돌했을 때 데미지 준다고 가정을 하면은좋은 컴퓨터는 데미지를 엄청 나게 줄 수 있고느린 컴퓨터는 데미지를 적게 주고 나올 것이다.이런식으로프레임 잘나온다면 개 긁듯이 긁으면서 데미지 주고 나옴.(
Collider클래스도 자체적인 위치가 필요하다.그러면 p_owner위치를 collider위치라고 하면 안되나?그럼 따라갈 필요도 없는데 말이다...=> 문제가 있다.충돌체를 유연하게 사용못 할 수도있다.만약에, 나중에충돌체를 이렇게 설정하는게 아니라충돌체를 대가리에다
이런 탄막 슈팅게임은 보통 충돌체의 크기가 저만하다.그래서 이런게임 보면은 틈 사이에 막 들어가서 아슬아슬 하게 피한다.물체들간에 충돌을 판정할 대 그룹간에 충돌로 지정을 할 것이다.물체가 100개가 있다고 가정을 하면은서로가 서로를 싹다 리그전 처럼 계산을 할 것이다
이때까지 거의 사용해본적 없다가 이제 사용한다!기억이 잘 안남! or and말고!만약 비트가 같다면은 켜주던가 꺼주던가 해아하는데지금 생각나는게 '~'인데 이전에 했던 부분이 https://velog.io/@starkshn/CPP%EC%96%B4%EC%86%8
Collider 생성자를 호출 할 때마다 id를 하나씩 증가시켜서 받고있는데나는 일단 실행하면 이런식으로 뜨네??나중에 Collider가 복사가 된다고 하면은 어떻게 될까??복사 생성자가 호출되어서 모든 멤버들의 값을 싹다 복사 해준다.(기본 복사 생성자의 경우)각각의
현 시점 기준으로 충돌을 검사를 할 것이다.최종시점에 검사를 해야한다.ColliderManager의 update는 finalPos가 이미 나와있는 시점이다.그다음에 CollisionManager update가 돈다.그래서 충돌체의 최종위치를 가지고 와야한다.중점으로부터
현재 충돌 알림은 Collider가 받고있다.그런데 결국 오브젝트가 이 충돌을 알아야하는데...같은 충돌이 발생하더라도 충돌체에 따라서 할 일들이 다르다.우리가 다형성을 이용하여 충돌체가 무엇인지 파악을 할 것이다.최상위 부모인 Object에서 이렇게 함수를 만들어주고
간단한 이벤트부터 처리를 해보도록 하자.기본구조는 이번트 추가할 수 있는 함수 AddEvent 뚫어주고update에서 하나하나씩 돌면서 처리를 해주어야한다.이 '처리'를 해주는 함수를 하나 또 구현해야한다.Excute 함수 만들어서 이벤트를 받아서 처리를 할 것이다.이
Delete 테스트 먼저 COjbect상속받는 애들싹다 이름 SetNameObject로 설정해주고 이름가져와서 DeleteObjectEvent에다가 이벤트 보낸다. 그리고 Func.cpp에서 해당함수를 구현해준다. AddEvent하고나면 끝! update의 경
template일 경우에는 함수같은거 헤더에다가 구현해야한다.https://hwan-shell.tistory.com/253함수 템플릿요청된 타입이 있어야만 그 버젼의 함수를 만들어주는 '함수 템플릿'이다.Scene의 update 함수 오버라이딩해서 C오버라이딩
암시적 복사 생성자1) 부모 클래스의 복사생성자 호출2) 멤버 클래스 복사 생성자 호출3) 1), 2) 둘다 아니라면 멤버가 기본 타입일 경우 메모리 복사. (얕은 복사)명시적 복사 생성자명시적 = 우리가 다 컨트롤 하기 때문에 기본 생성자가 호출 될 수 밖에 없다.1
template inner class 사용시 typename 명시animator는 컴포넌트로 관리를 할 것이다.그렇기 떄문에 생성자와 소멸자 신경써야하고p_collider와 마찬가지로 깊은 복사, 얕은 복사 신경써야한다.싹다 동적할당 할 것이다.Collider와 마찬가
현재 흐름이 오브젝트가 가지고있는 컴포넌트들 중에Collider -> update 진행하고animator경우 map으로 모든 애니매이션 가지고있는데 그 중에서도 현재 애니매이션 -> update돌릴 것이다.Player에서 CreateAnimtion 컴포넌트를 만들때 호
Player Animation 띄우는 작업을 해보도록 하자.이제 Player는 Texture\* 라는 멤버 포인터 변수랑 TransParentBlt 필요가 없다.render할 부분은 실제 플레이어가 들고있는 animator가 화면에 나올 것이다.\_vecanimFram
애니매이션 그릴 offset위치, 실제 collider 위치를 offset으로 다르게 보이게 설정 (2d 탑뷰 게임)operator += 나는 \+= 연산자 이렇게 구현을 했는데그냥 이런식으로 구현.Animation(3) 강의에서 크래쉬 나던 부분 수정원래는 if문 끝
오늘 배운거 👍👍👍 이런 pos 들은 오브젝트들의 '실질적인 위치'를 말하는것이다. 어디에든지 있을 수 있다. 근데 이것이 화면에 나온다는 보장은 없다. 카메라가 찍고있어야 나오는 것이다. 실제 좌표, 출력 좌표 ❗❗ 를 따로 관리를 해야하는 필요성이
플레이어나 (몬스터의 경우) 그런 경우 부모의 render함수 사용하지 않고자체적인 render함수를 호출하여 화면에 자기 자신을 그리고있다.(virtual 로 상속을 했으니까)이렇게 오브젝트의 '실제위치'를 얻어와서 사용하고있는데'렌더링용 위치'를 알아야한다.이렇게
플레이어나 (몬스터의 경우) 그런 경우 부모의 render함수 사용하지 않고자체적인 render함수를 호출하여 화면에 자기 자신을 그리고있다.(virtual 로 상속을 했으니까)이렇게 오브젝트의 '실제위치'를 얻어와서 사용하고있는데'렌더링용 위치'를 알아야한다.이렇게
플레이어나 (몬스터의 경우) 그런 경우 부모의 render함수 사용하지 않고자체적인 render함수를 호출하여 화면에 자기 자신을 그리고있다.(virtual 로 상속을 했으니까)이렇게 오브젝트의 '실제위치'를 얻어와서 사용하고있는데'렌더링용 위치'를 알아야한다.이렇게
❗❗ 거 = 속 \* 시공식을 통해 거리가 멀든 작든 클릭할때마다의 거리 차이값을 통해 속력을 구한다음에 해당 시간 동안 그 거리를 다 움직일 수 있도록 SetLookAtPos함수를 통해 구현했다.가속도 Acceleration가속도의 방향은 힘을 받는 방향이다.등속도
컴파일 속도가 이제 많이 걸린다.컴파일 시간을 줄이기 위해서전방선언을 습관화 하자. => 헤더에서 다른 애들을 참조하게 하지말자.왜냐하면은 헤더에서 헤더를 참조를 하면은, A 파일에서 필요한 기능은 A헤더에서만 선언되어있는 것들만 필요한데그 A헤더가 B 헤더를 참조를
타일 texture 행과 열을 나누기, 나머지 연산자로 접근하기게임을 만들 떄 서포팅해줄 씬 작업이다.SceneManager처음에 TOOL로 진입을 할 것이다.중간에 pch.h헤더파일 문제 생겨서global이라는 헤더파일만들고 main에서 이거 참조하도록 변경하자.gl
tile 제작에 필요한 UIDailogBox 개념, 이론, 활용Resource.h 의 비밀?프로그램 메모리Resource.h 파일을 더블 클릭해서 보고있다는 것은...이렇게 보고있다는 것은 => VS도 프로그램이기 때문에 Resource.h를 메모리 어딘가에 올려서 그
제발 니가 헤더에 정의해놓고 안된다 하지말자...dynamic_cast다운캐스팅을 진행한ㄷ.실패하면 nullptr, 성공하면 그대로 값 반환.TileCountProc함수 인자에message를 스위치로 나누었는데 이때 메세지가 발생한거 잡고if문으로 wParam값으로 I
이렇게 했을 때 문제가 뭐냐하면은이런식으로 카메라 이동후 클릭하면은 변경된다.
UI는 마우스 인식도 해야하고 클릭도 인식을 해야한다.이런거 그때마다 조건을 채크를 할게 아니라UI 오브젝트들만의 Event를 다 설정을 해주면 된다.어떤 UI든지간에 이벤트들을 다 설정을 해놓고 거기에 맞게 함수를 구현을 해놓자라는 것이다.이벤트는 다 구현하니까 시점
재귀함수로 접근?Level 순회Level 순회로 접근 할 시 나중에 검사하는 애가 우선순위가 높다 라고 생각하게 된다.(재귀함수로 접근할 시 문제점 생각)Level 순회 & Queue ❗❗❗UI 자식 UI보유할 경우를 생각해서설계를 할 것이다.1번 버튼을 클릭을 해도
UI (4) 강의에서 말했던 문제점이 있기 때문에targetUI 인 상태에서 눌렀다가 밖에서 마우스를 때는 경우...그래서 타겟팅이 안된 녀석들은 벡터로 관리를 할 것이다.타겟이 while문 안에서 변경될 수도 있다. 87번째의 else문으로 빠졌다! 라는 것은 지금
부모 UI들 중에서 누가 포커싱이 되어 있는지 찾을 것이다.Panel, button구현하고PanelUI만 클릭하고 드래그 기능을 만들 것이다.마우스를 클릭한 순간의 좌표를 기억을 해준다.그리고 해당 차이값만큼UI도 똑같이 이동시켜주면 된다.왼쪽에는 UI에서 LbtnDo
현재 update안에서 현재 씬에 존재하는 모든 UI에 들에 대해서update를 돌면서 마우스 클릭 이벤트 처리를 다 해주고 잇었는데 이럴게 아니라UIManager에서 Target을 관리를 해주도록 할 것이다.
이때까지 씬의 모든 UI들에 대해서 벡터를 싹다 순회를 하면서 이벤트를 보내 주었었는데이제는 UIManager 에소 현재 포커싱된 애를 관리를 한 다음에 그녀석에 대해서만 이벤트 처리를 해주면된다.이런식으로 찾아주도록 하자.그러면 이제 update 함수의 구조를 좀 바
함수 포인터를 활용한 ButtonUI클래스 멤버 구현https://velog.io/@starkshn/%ED%95%A8%EC%88%98-%ED%8F%AC%EC%9D%B8%ED%84%B0-1-2>typedef int(FuncType) (int a, int b);
파일 입출력의 개념c_str() 함수w, wb 차이점 r, rb차이점fwrite가 왜 void\* 받고 사이즈를 받는지.그림판에 작업을 한 그 그림을 파일로 저장을 시키고 나중에 컴퓨터를 껏다 키든 뭐든 내가 작업했던 부분을 다시 불러올 수 있다.근데 이게 가능한 이유
타일 데이터 저장 : 윈도우 에서 제공하는 함수 사용타일 데이터 불러오기 : 저장할 때와 거의 똑같다.타일 불러올 때 경로 수정전체 경로 -> 절대 경로 자른다 -> 상대경로 만 추출상대경로 추출 하는 과정에서 wstring 에서 제공하는 함수 사용함수 : find()
오늘 배운거 👍👍👍 전역함수 vs 멤버함수 참이점 ❗❗❗ 현재 ToolScene의 Enter부분에서 이렇게 Clone한 UI에 대해서만 SetClickedCallBack함수를 통해서 ChangeSceneByBtn이라는 함수를 연결해주었다. -> 이렇게되면은
현재 ButtonUI클래스에서 Texture포인터로 멤버로 들고 있게 한다음render함수 오버로딩해서 UI버튼만 render할 수 있도록 구현함Tile에 구현해놓은 render, Object를 상속받는 클래스들의 render를 보면서 참고를 했기 때문에 크게 어려운점
Alpha Belending 사용하기 전에 필요한 사전 작업이 있다..bmp 포맷 : 3바이트 -> 1바이트당 0~255 -> RGB 표현Alpha Belending를 할려면은 RGB옆에 Alpha값이 하나 더 있어야한다.Alpha가 0이라는 것은 투명하다는 것이고25
카메라에 특수 효과를 적용할 것이다.
만약 이렇게 적용할 경우 결국 적용되는 것은 뭐냐?render의 공통부분은 위로 빼주고 Alpha값만 구하는 부분이 조금 다르다.FADE_IN의 경우 비율을 반대로 구해야한다.지금 이대로 해준다면은 FadeIn만 적용이 되는데 out -> in 순서로 하고싶은 것이다
몬스터 인공지능 => FSM사용해서 만들 것이다.몬스터 AI는 FSM을 사용할 것인데온라인 게임에서 제일 단순한 방식이다. 서버에서 처리를 해야하기 때문에 부담이 많이가서 힘들다. FSM이 제일 구현하기 쉬운 AI이다.프로그래머의 노가다로 만들어지는 인공지능이다.'학습
tile만을 예외적으로 렌더링 하는 부분구현render_tile을 구현후 현재 카메라좌표와 해상도의 사이즈와 tile_size를 통해 행과 열을 구해 tile의 현재 인덱스를 추출함.몇가지 보완 하고 넘어 갈 것이다.타일 갯수 많아 질 경우 프레임 드랍이 심해질 것이다
명시적/암시적일 경우의 자식클래스의 부모 클래스 생성자 호출 순서 및 방법 ❗❗❗현재 다형성을 활용하여 구조를 짯는데Monster는 AI를 포인터로 들고있고 AI는 State를 멤버 포인터 변수로 들고있는 상황이다.각각의 Idle, Attak..등등은 State를 상속
Factory Pattern몬스터의 AI 구성 셋팅을 미리미리 만들어 놓는 작업을 먼저 하도록 하자.자주 사용할 것들을 미리 정의 해놓는 이런 느낌, 패턴을 "Factory Pattern"이라고 한다.몬스터를 생성하는 정형화 된 패턴을 -> 하나의 함수화모든 씬들이 M
유도탄 구현벡터, 회전 힘 등으로 구현하는 방식 (추진이 달린 로켓)힘으로 구현하는 방식유도탄 만들껀데 방향을 회전하는 속도도있어야 할 것이고 방향도 있어야한다.그런데 이런 방향 말고 '힘' 개념으로 적용시키는 미사일도 있다.물체에 힘을 가하면 물체의 힘은 : 물체의
현실의 저항 구현?저항 구현하기 복잡하다 -> 최대 속력 제한힘을 적용 시키지 않더라도 이전에 준 힘때문에\_velocity의 크기가 남아 있어서 해당 방향으로 계속 움직이는데이 부분을 마찰로써 상쇄 시켜 주어야한다.질량이 엄청 큰 물체가 있다고 가정을 하자.만약 힘을
힘의 범위 구하기범위를 구하면서 '비율' 구하는 부분 체크 ❗❗❗힘을 그려볼 것이다?이런식으로 KEY_HOLD 왼쪽 클릭일 경우 힘이 생성되는 부분의 좌표를 얻어올 것이다.현재 내가 백그라운드 그림을 그리고 있기 때문에 먼저 백그라운드 텍스쳐 그리고 힘주는 원 생성을
\_dir 에 따라서 어떤 텍스쳐를 사용하지 정함UpdateState, UpdateAnimation,등등을 구현하여 상태에 따른 애니매이션 재생을 달리 할 것이다.유니티와 똑같다.리소스 자체가 점프를 하면 분간이 안되는 리소스를 사용중이다.탑뷰 혹은 쿼터뷰 리소르의 경
switch 지역 변수의 범위\_prevState = \_curState하는 부분을 제일 뒤로 빼주도록 하자.그래야 나의 상태에 따라서 UpdateState, UpdateMove등 Update시리즈에 걸려서 상태를 변경할지 말지를 정할 수 있으니까현재 UpdateAni
오늘 점프 구현할 것이다.먼저 언제 점프 상태로 진입할지 생각을 한다면은일단 먼저 땅에 있는지 확인 부터 해야한다.땅 밟은 유무를 T/F로 할 것인데이것을 컴포넌트 방식으로 일단 해볼 것이다.상속으로 해도 상관은 없는데 상속기반으로 구현을 한다면은골치아파짐 -> 상속
최근에 문법이 조금 바뀌어서 함수 안에서의 연산 수식결과 값을 바로 활용하지 말고 지역변수로 담아 놓고 사용하도록 하자.땅을 파고 들었을 때의 예외 처리를 하도록 하겠다.현재 나의 중점 위치랑 땅의 중점위치를 구해서나의 y좌표의 절반과 땅의 y좌표 절반을 더한다.곂치지
축 별로 속도 제한 검사 => 절대값방향을 모르니까 음수 방향이든 양수방향이든 상관없게 하기 위해서 absolute 사용.Normalize 정규화 대신에 (\_velocity.\_x / abs(\_velocity.\_x))중력 관련 제한 속도 부터 구현중력을 받는 오브
일단 점프했을 때 일단 점프만 되도록 하도록 수정하였다.Enter/Stay/Exit에 대한 에러를 좀 해결을 하고현재 Player클래스의 UpdateMove부분에서움직일 때 초기 속도를 주는 부분이 있었다.이런식으로 그런데, 공중에서 이동키 연타를 하면은 막 빨라지는데
데이터 직렬화 ❗문자열 입출력 ❗❗❗wstring객체는 vector처럼 동적할당한다.문자열은 객체안에 문자열을 넣지 않고 wchar_t타입을 넣는다.벡터 Load시 반복문 대신 resizevector의 동적할당 작업을 최소화오늘 애니매이션 관련 작업을 할 것이다.먼저
직렬화한 데이터들 Save/Load 흐름 파악바이트 단위로 저장한 데이터 -> 좀더 사용자가 보기 편하게, 즉, 좀더 유의미한 데이터로 시각적으로 볼 수 있도록 해야하지 않나?fwprintf를 통해 2바이트 문자열 저장wstring -> string으로 변환 하는 방법
우리가 Animation(6)의 초반에서 다른 사용자가 봤을 때도 유의미한 데이터를 저장 시키지는 않고바이트 단위로 바로 데이터들을 저장을 시켰었다.그래서 저장하는 방식을 문자열 형태로 보여질 수 있도록 '정수 데이터'들도 보여질 수 있게 아스키 코드로 다 저장을 했다
오늘 배운거 👍👍👍