게임메이커: 스튜디오(GameMaker: Studio)에서는 파일을 입출력할 수 있는 경로가 매우 제한적입니다.
그도 그럴 것이 겜스는 크로스 플랫폼을 지향하므로, OS 마다 파일을 저장할 공간의 통일성이 필요하기 때문이죠.
저장 공간의 통일성을 위해 겜스에서 파일을 여는 코드는 대부분 working_directory 로 부터 시작됩니다.
이런 working_directory 는 Bundle Area 와 Save Area 라는 두 가지 개념으로 나뉩니다.
Bundle Area 는 윈도우의 경우 게임이 실제로 존재하는 위치이고, Save Area 는 %localappdata%\<Game Name> 라는 경로입니다.
파일을 읽을 때에는 Save Area 에 파일이 있는지 먼저 체크하고, Bundle Area 경로를 확인하게 됩니다.
반면 파일을 쓸 때에는 Save Area 에서만 작성되게 됩니다. (복잡한 개념이니 겜스 기본 도움말을 참조해주세요.)
경로 제약을 하는 이유가 이해가 가긴 하지만, 윈도우 게임만 제작하는 사람의 경우 이러한 제약은 매우 치명적일 것입니다.
그래서 GMC 에서는 GMFileSystem 이라는 GEX 를 따로 지원합니다.
윈도우 게임을 제작하실 분께서는 이 강좌를 보시고 난 뒤, 필요하다면 위 GEX 를 사용하시면 될 것입니다.
첫 번째 강좌에서는 텍스트 파일을 읽고 쓰는 법을 배워볼 것입니다.
텍스트 파일을 읽기 위해서는 먼저 파일을 열어야 합니다.
게임메이커: 스튜디오에서는 다음과 같은 텍스트 파일을 여는 함수 세 가지를 제공합니다.
file_text_open_read 파일을 읽기 모드로 엽니다.
file_text_open_write 파일을 쓰기 모드로 엽니다.
file_text_open_append 파일을 추가 기입 모드로 엽니다.
쓰기 모드로 여는 것과 추가 기입 모드로 여는 것의 차이점은 쓰기 모드는 파일을 아예 처음부터 작성하는 것이고,
추가 기입 모드는 파일의 가장 마지막 부분부터 추가로 작성하는 것입니다.
추가로, 파일을 열고난 뒤에는 반드시 file_text_close 함수를 통해 파일을 닫아주어야 합니다.
그렇지 않으면 프로그램이나 OS 에 그만큼 무리가 가겠지요.
위 코드는 text_str 라는 배열에 텍스트 파일의 모든 라인을 저장하는 코드입니다.
file_text_eof 함수로 파일의 끝에 도달했는지를 구하고, file_text_read_string 함수로 문자열을 구한 뒤, file_text_readln 함수로 다음 라인으로 이동하는 것을 보실 수가 있습니다.
다른 언어에 비해 비교적 간단하지 않나요?
아참, 참고로 겜스는 텍스트 파일의 인코딩 형식을 ANSI 가 아닌, UTF-8 을 지원합니다.
아스키코드로 작성된 파일의 한글은 문자열을 읽을 때 깨질 수가 있습니다.
텍스트 파일을 쓸 때에는 위와 같은 방법으로 합니다.
file_text_open_write 함수로 열고, file_text_write_string 함수로 문자열을 기입한 뒤, file_text_writeln 함수로 다음 라인으로 개행하는 것을 보실 수가 있습니다.