티스토리 뷰

- Tile based games (http://www.tonypa.pri.ee/tbw/start.html)
위 튜토리얼을 기본으로 하여 Android에 사용될 수 있게끔 공부한 포스트 입니다.




[이미지]





처음 intro에서 봤듯이 배열로 맵 정보를 담고 있는 타일을 그려보도록 하겠다.
아래 내용을 살펴보면 알겠지만 원본 튜토리얼은 플래시 기반이기 때문에 Android와는 좀 다르다. 때문에 원본 내용과 다를 수 있음을 밝힌다.

- Creating Tiles
- More Tiles


 

1. Tile Class 생성


먼저 클래스를 만들기로 했다. 플래시가 기본이었던 탓에 기본적으로 가지고 있는 객체 정보도 함께 추가를 해줘야 했다. 클래스 변수로는 기본적으로 생성해 줘야 했던 walkable, frame 을 만들어 줬고, 크기 정보와 위치 정보를 입력해주었다.

[MAP_Tile Class 생성 ]
public class MAP_Tile {
	public int mWalkable = 0;
	public int mFrame = 0;
	
	public int mWidth = 0;
	public int mHeight = 0;
	
	public int mX = 0;
	public int mY = 0;
	
	public MAP_Tile(int Walkable, int ResFrame, int width, int height) {
		mWalkable = Walkable;
		mFrame = ResFrame;
		mWidth = width;
		mHeight = height;
	}
	
	public void setPosition(int x, int y) {
		mX = x;
		mY = y;
	}
	
}
추가 의문이 드는 부분은 Walkable 속성을 넣어주는 부분이다. 지금은 0,1로만 이루어져 있는 상황이라 괜찮지만 나중에 Res 이미지들이 많아지게 되면 Walkable을 일일이 넣어줘야 할텐데.. 이때에는 MAP의 기본 데이터가 두개 이상이어야 하는 것인가?? 이 의문의 답은 언젠가 밝혀질 테니 나중에 정해지면 뒤의 강좌에 넣어보도록 하자.

2. MAP Class 생성


이제는 Map Class를 생성해보도록 하겠다. 각 씬에 맞게 사용되는 MAP을 가지고 있기 때문에 클래스별로 MAP DATA를 가지게끔 만들기로 했다


[MAP_Street_1 Class 생성 ]
public class MAP_Street_1 {

	public static final int MAP_X_COUNT = 10;
	public static final int MAP_Y_COUNT = 6;
	
	public int [][] MAP_DATA = {{0,0,0,0,0,0,0,0,0,0},
				    {0,1,1,1,1,1,1,1,1,0},
				    {0,1,0,0,0,1,1,0,1,0},
				    {0,1,0,0,0,1,1,0,1,0},
				    {0,1,1,1,1,1,1,1,1,0},
				    {0,0,0,0,0,0,0,0,0,0},
				    };
	
	public MAP_Tile [][] map = new MAP_Tile[MAP_Y_COUNT][MAP_X_COUNT];
	
	
	public MAP_Street_1() {
		buildMap();
	}
	
	public void buildMap() {
		
		int x=0;
		int y=0;
		
		// Build MAP
		for(y=0; y < MAP_Y_COUNT; y++) {
			for(x=0; x < MAP_X_COUNT; x++) {
				Log.d("YSK","MAP_DATA["+y+"]["+x+"]="+MAP_DATA[y][x]);
				map[y][x] = new MAP_Tile(MAP_DATA[y][x], MAP_DATA[y][x], 80, 80);
				map[y][x].setPosition(map[y][x].mWidth*x, map[y][x].mHeight*y);
				
			}	
		}
	}
	
	public void Render(Canvas canvas) {
		
		int x=0;
		int y=0;
		for(y=0; y < MAP_Y_COUNT; y++) {
			for(x=0; x < MAP_X_COUNT; x++) {
				canvas.drawBitmap(DataMgr.MAP_TILE[map[y][x].mFrame], map[y][x].mX, map[y][x].mY, null);
			}
		}
	}
}
주요 사항에 대한 코멘트를 남기자면...
public int [][] MAP_DATA = {{0,0,0,0,0,0,0,0,0,0},
			    {0,1,1,1,1,1,1,1,1,0},
			    {0,1,0,0,0,1,1,0,1,0},
			    {0,1,0,0,0,1,1,0,1,0},
			    {0,1,1,1,1,1,1,1,1,0},
			    {0,0,0,0,0,0,0,0,0,0},
			    };
위와 같이 2차원 배열을 정의해 놓고 이 변수를 이용하여 TILE MAP을 새로 정의 한다.

[Line 21] Map 을 생성시켜주기 위한 메소드다.
[Line 44] Canvas에 이미지를 그려주게 된다. Tile의 종류에 따라 이미지가 표시된다.
댓글
댓글쓰기 폼