-
(챕터 01) 처음만드는 게임(추가 부분)@ 16. 1 ~ 17. 1/게임프로그래밍의 정석 2013. 4. 22. 23:29
갑자기 스테이지 데이터를 읽어본다고 한다.
뭐...어렵진 않은데 이해가 안되는 부분이 조금 있었으니..스스로 공부가 필요하다.
파일을 읽는 데는 ifstream을 사용한다.
아래처럼 사용할 수 있도록 예제를 제시하였다.
#include<fstream> #include<iostream> using namespace std; int main() { ifstream inputfile("stagedata.txt", ios::binary); inputfile.seekg(0,ios::end); int filesize=static_cast<int>(inputfile.tellg()); inputfile.seekg(0,ios::beg); char* fileImage=new char[filesize]; inputfile.read(fileImage,filesize); cout.write(fileImage,filesize); }
이렇게 사용을 한다고 하는데..
우선 맨끝으로 이동 seekg 그 위치를 조사 tellg 하여 크기를 구하고..
다시 처음으로 돌아가서 seekg beg 필요한 영역을 확보하여 단숨에 읽는다고 read 한다.
이렇게 설명하는데...뭐 이해가 안되는건 ..똑같다..
그래서 공부했다.. 뭐.....
근데 여기서 짚고 넘어가야할 것.
static_cast라는 것이다.
int나 float를 서로 변환할 때 사용한다고 한다. 뭐 c에서 () 캐스팅 연산자와 같다고들 한다.
이런식으로 사용
int main() { double f=9.9; int temp=static_cast<int>(f); getch(); return 0; }
뭐..간단하다..
그리고 연산자 오버로딩을 사용하여 operator() 를 구현하였다.
이런식으로 클래스를 구현하여 사용하였다.
class IntArray2D{ private: int* mArray; const int mSize0; const int mSize1; public: IntArray2D(int size0, int size1) : mArray(0), mSize0(size0), mSize1(size1) { mArray=new int[size0 * size1]; } ~IntArray2D() { delete [] mArray; mArray=NULL; } int& operator()(int index0,int index1) { return mArray[index1 * mSize0 + index0]; } const int& operator(int index0, int index1) { return mArray[index1 * mSize0 + index0]; } };
특히 이것을 템플릿화 하여 열거형에서도 사용할 수 있도록 재변경한점은..놀랍다..
(내가 생각하지 못했다면 다 놀라운것이다...;)
이런식으로..
template <typename T> class IntArray2D{ 말이다..
이제 이 연산자오버로딩을 이용하여 이런식으로도 작성할 수 있다.
IntArray2D a;
a(4,3) 이런식이 되겠지..
마지막으로 C로 구성한 내용을 C++로 재구성한 예제가 있다...뭐 공부만 조금한다면 이해가 된다.
아무튼...조금만 공부했으면 어렵지 않게 넘어갈 수 있다.
'@ 16. 1 ~ 17. 1 > 게임프로그래밍의 정석' 카테고리의 다른 글
(챕터 02) 점에서 시작하는 2D그래픽(2) (0) 2013.04.24 (챕터 02) 점에서 시작하는 2D그래픽(1) (0) 2013.04.23 팁: 플래그와 비트연산 (0) 2013.04.23 (챕터 01) 처음만드는 게임(인트로) (0) 2013.04.22 게임프로그래밍 정석 책학습..인트로 (0) 2013.01.13