2014-02-19 3 views
0

Slick2D 라이브러리를 사용하여 Java에서 2D 게임 엔진을 매우 단순하게 만들고 텍스트 파일에서 레벨 (타일 맵)을로드하려고합니다. 나는이 같은 타일에 각 번호를 할당하고 싶지 않은, 따라서 여러 다른 타일 세트를로드 할 수 있도록하려면, 그리고 대신Slick2D의 텍스트 파일에서 타일 맵로드 중

1 1 1 1 1 
    1 0 0 0 1 
    1 0 0 0 1 
    1 0 0 0 1 
    1 1 1 1 1 

    (Where 1 is a wall and 0 is a floor) 

, 나는의 x 및 y 좌표를 사용할 수 있도록하고 싶습니다 tilemap는 가로 질러 타일이처럼 타일 세트에에 위치한 아래 얼마나 많은 타일을 표현하기 :

0,0 0,0 0,0 
    0,0 1,0 0,0 
    0,0 0,0 0,0 

    (0,0 is the tile in the upper left hand corner of the tileset, 1,0 is the second tile in the tileset) 

내가 텍스트 파일을 읽고 앞에 정수를 저장하는이와 데 가장 큰 문제 쉼표는 Pos1 (X 값)이고 쉼표 다음은 Pos2 (Y 값)로 표시됩니다.

어떻게하면됩니까? 일반 파일 판독기, 버퍼링 된 판독기 또는 스캐너를 사용합니까?

Slick2D에는 Tiled Map (.tmx) 파일을 읽을 수있는 기능이 내장되어 있지만 게임 엔진에는 타일 맵 편집기가 내장되어 있으므로 일반 텍스트를 사용하고 싶습니다. 파일.

답변

0

텍스트 편집기에서 파일을 열 수 있도록 파일을 해당 형식으로 작성해야한다면 BufferedReader를 사용하여 파일을 읽은 다음 각 줄을 문자열로 읽고 각 공백을 먼저 나누십시오 그런 다음 각 쉼표에서 문자열을 구문 분석하여 전화 번호를 반환하십시오.

그러나 쉬운 방법은 int 값을 문자열로 변환하는 대신지도 편집기에서 직접 작성하는 것입니다. 이렇게하면 당신은 공간을 절약 할 모든 사용자가 데이터를 읽을해야 할 것입니다 것은 :

try(DataInputStream in= new DataInputStream(new BufferedInputStream(new FileInputStream(new File("file"))))){ 
    int numValues=in.readInt(); 
    for(int i=0;i<numValues;i++){ 
     int x = in.readInt(); 
     int y = in.readInt(); 
    } 
} 

그리고지도를 저장하는지도 편집기에서 그냥 파일에 타일의 수를 쓸 것이며, 각 타일의 x와 y 좌표는 writeInt()과 DataOutputStream으로 조정됩니다.

지도의 너비와 높이를 파일에 써서 일정하지 않은 경우 다시 구성하거나지도의 타일 좌표를 재구성 할 수 있습니다.

+0

감사합니다.하지만 16x16 타일 세트와 같이 좌표에 둘 이상의 숫자가 있으면 어떻게 될까요? 첫 번째 예제는 1,2,14를 1,2 1,4 – FidgetyTheGamer

+0

으로 읽습니다. 두 번째는 쉼표가 없으므로 두 자리 숫자의 좌표를 텍스트 파일에 쓸 방법이 없습니다. – FidgetyTheGamer

+0

텍스트 파일에 12,14 13,15 줄이있는 경우 첫 번째 예는 처음에는 공백에서 문자열을 분할하고 12,14 및 13,15을 String [] 값에 별도의 문자열로 저장 한 다음 각 문자열을 쉼표로 분리하고 반환 된 처음 두 문자열을 구문 분석하여 루프의 첫 번째 반복에서 x와 y로 저장된 12와 14가됩니다. 두 번째 예제에서와 같이,'readInt()'와'writeInt()'둘 다 두 자리의 정수 나 다른 정수를 사용할 수 있습니다. 한 번에 한 자리 만 처리 할뿐만 아니라 전체 숫자도 처리합니다. – Alex

관련 문제