Inventory
-
싱글톤 클래스@ 16. 1 ~ 17. 1/게임프로그래밍의 정석 2013. 5. 6. 21:22
클래스내 함수에서 매겨변수가 this일 경우 예를 들어 void Getinput(this); 일 경우 this 포인터 즉 자기자신의 객체가 들어가게 되는것..?? 싱글톤의 목적 1. 전역변수가 지닌 위험을 줄인다. 2. 전역변수와 같이 사용할 수 있게 한다. class Single{ public: static Single* instance(); static void destroy(); private: Single(); Single(const Single&); ~Single(); static Single* mInstance; }; 생성자와 소멸자가 private로 되어있다. 즉 아무도 호출할 수 없게 되어 있다. 복사생성자 조차 안된다. 이래선 사용할 수 없다고 생각하지만, 그걸 대비해서 create와 d..
-
(챕터 03) 이미지 파일을 사용하자(2)카테고리 없음 2013. 4. 30. 23:15
reinterpret_cast 란!? 특정 형 포인터에서 다른 형 포인터로 만들 때나 포인터와 정수를 서로 변환할 때 사용한다. 알파채널 투명여부를 판단하는데는 추가적인 정보가 필요하다. 현재 색은 적색, 녹색, 청색 세 가지밖에 없고 1바이트가 남는다.(unsigned) 이 남는 부분에 투명 불투명을 나타내는데 이것이 바로 알파채널.. 책에서는 투명과 불투명 두개를 나타내니..0과 1로도 충분하다고 하지만 1바이트가 남았으니 여유있게 128 이상과 미만으로 나눈다고 한다. 즉 0과 255라는 양끝 값을 대표값으로! 검은색은 0이요, 255는 흰색인지라.. (처음에는 왜 그런지 몰랐다.) 알파채널인지 여부 판단은 아래 if문 같이 한다고 한다. int alpha=(src&0xff000000) >> 24;..
-
(챕터 03) 이미지 파일을 사용하자@ 16. 1 ~ 17. 1/게임프로그래밍의 정석 2013. 4. 24. 23:17
드디어 지난번 난해했던 3장에 왔다..스스로 힘내보자꾸나.. 이미지 파일 중 bmp, png, jpg같은 형식을 순수하게 자력으로만 읽어 오기에는 지나치게 복잡하다고 설명되어있다. (난 잘모르겠다..모르니 복잡한지도 모르겠다는...) 이 책에서는 Directx 표준 이미지 형식인 DDS형식을 사용한다고 한다. 내부가 단순하다고 표현되는데..이 점도 잘 모르겠음. DDS 32비트 ARGB라는데.. 알파 채널, 적색, 녹색, 청색이란다.. 결국 지금까지 사용하던 unsigned을 그대로 파일에 넣은 것과 같다고 표현한다. 그리고 다양한 DDS이미지를 사용할 수 있도록 이책에서는 bmp jpg png 이미지를 dds로 변환해주는 converter 프로그램을 제공해준다..(정말 친절하다.ㅠ) DDS 구조 파악 ..
-
(챕터 02) 점에서 시작하는 2D그래픽(2)@ 16. 1 ~ 17. 1/게임프로그래밍의 정석 2013. 4. 24. 22:40
간단하게 내용을 설명하면.. namespace GameLib{ void Framework::update(){ //메인 함수 내용 } } 상태에서 draw() 함수에 점을 찍을 수 있는 내용을 반영하였다 아래처럼.. unsigned* vram=Framework::instance().videoMemory(); unsigned windowWidth=Framework::instance().width(); 책에서는 화면도 작아서 drawCell() 함수를 만들으라고 하였는데..만들었는데 시행착오가 있었다. 한번도 겪지 못했던(이론적으로는 알고 있는) const 함수내 일반 함수호출 현상을 겪는 바람에 C2662 에러를 처음 접했다. 처음에는 무슨말인가했다.. 또 vram 변수와 windowWidth를 draw함수..
-
(챕터 02) 점에서 시작하는 2D그래픽(1)@ 16. 1 ~ 17. 1/게임프로그래밍의 정석 2013. 4. 23. 23:48
어느덧 2장까지 왔다..물론 책은 현재 3장 이상을 보고 있으나..다시 볼겸...블로그에 작성중에 있다. 2장부터는 준비된 라이브러리를 바탕으로 시작이 되더라..!? 2010버전에서는 안되며 2008버전으로 해야 정신상태에 이로운 부분이다..ㅋㅋ; 이번부터 사용할 라이브러리 클래스는 다음과 같다고 설명한다. class Framework{ public: static unsigned* videoMemory(); static int width(); static int height(); void update(); }; 간단한걸!? 책에서는 이 중 세가지 함수는 그냥 사용하면 되고..한가지는 직접 만들어야한다고 설명된다. videoMemory() 화면을 구성하는 픽셀 배열을 가져오는 함수라고 설명되어있다. 예를 ..
-
팁: 플래그와 비트연산@ 16. 1 ~ 17. 1/게임프로그래밍의 정석 2013. 4. 23. 23:06
책에서 설명을 하길.. 게임에서는 bool형 변수를 여러개 만드는 대신 unsigned형 변수 하나에 여러플래그를 묶어 넣는 방법을 자주 사용한다고 한다. 유무를 표시하는데는 0과 1을 나타내는 비트 하나면 충분하기때문에 4바이트 크기인 unsigned형 변수 하나에는 플래그 변수를 32개 모아 둘 수 있다는 것이다. 놀랍네..!그리고 약..40억 종류를 표현한다고 한다??! 뭐야 이거...엄청나다! 책에서는 플래그를 클래스로 만들면 아래와 같다고 소개해준다. class Flag{ private: unsigned char mFlags; public: bool check(인수 미정); void set(인수 미정); void reset(인수 미정); }; check 함수로 특정 플래그 상태를 조사하고 set..
-
(챕터 01) 처음만드는 게임(추가 부분)@ 16. 1 ~ 17. 1/게임프로그래밍의 정석 2013. 4. 22. 23:29
갑자기 스테이지 데이터를 읽어본다고 한다. 뭐...어렵진 않은데 이해가 안되는 부분이 조금 있었으니..스스로 공부가 필요하다. 파일을 읽는 데는 ifstream을 사용한다. 아래처럼 사용할 수 있도록 예제를 제시하였다. #include #include using namespace std; int main() { ifstream inputfile("stagedata.txt", ios::binary); inputfile.seekg(0,ios::end); int filesize=static_cast(inputfile.tellg()); inputfile.seekg(0,ios::beg); char* fileImage=new char[filesize]; inputfile.read(fileImage,filesize)..
-
(챕터 01) 처음만드는 게임(인트로)@ 16. 1 ~ 17. 1/게임프로그래밍의 정석 2013. 4. 22. 22:42
책에서는 아래와 같은 푸쉬푸쉬? 게임을 처음부터 만들어간다.이름은 배달맨이라고 하는..뭐....이름이 중요하진 않은것 같다. 책에서는 친절히 키보드 출력, 종료, 메인 루프 등 어느정도 자세하게 이해를 돕기 위해 작성이 되어있다.(이부분은 처음접하는 독자분들에게는 굉장히 고마울듯..)게임은 입력을 받고 그 값을 반영하여 결과를 표시하는 처리가 반복되는 것으로 이뤄진다.아래와 같이 표현되어 있다. 책에서는 아는 한 게임은 하나도 예외 없이 이런 구조로 되어있다고 한다..뭐..나야 본적이 없으니 모르지만...while(true) { getInput(); Update(); Draw(); } 그리고 위의 화면 게임을 만드는데 직접만드는것을 요구하며..(물론 예제가 있다) 한시간 내로 하면 대단한것 반나절 걸렸어..