티스토리 뷰

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



이번 편은! Open the door!
사실 만든건 지난 금요일이라서 그런가.. 기억이 잘 안난다.... 딱히 중요했던 사항도 없었음.
소스는 하단 첨부 하며 이미지는 door 이미지가 추가되었다.


1. 이론 정리


생각해보니까 지금 사용하는 프레임워크에는 change_scene이라는 메소드가 구현되어있다. 간단한 맵이동이라 별도의 Scene 처리를 해주지 않았는데 앞으로는 처리를 해줘야 할 것 같다.

이번 장은 간단하고 무난했다. Tile State 에 따라 충돌 체크를 해주었다.
이번엔 그 State의 값이 2,3이다. 회색으로 처리해준 곳을 각각 2와 3이란 값을 넣어주고 회색 이미지가 출력되게끔 처리 해준다.

우리의 Hero가 이동한 곳의 State가 2라면! 바로 순간이동을 해준다. 3으로 이동되게끔 해주면 된다.
반대로 State가 3이라면 2로 이동되게끔 해주면 된다.

일요일날 본 블랙버드가 갑자기 생각난다.
방으로 들어가는 문을 열었는데 갑자기 저 머~~~얼리 집으로 이동하는 그런 내용이었다. (전혀 상관 없잖아!!)

음음...돌아와서 이렇게 나열하는 것은 별로 좋지 않으니까 간략하게 정리해보면

1. Hero는 움직일 때마다 State 체크를 해주고 있다. (왜냐! 벽충돌 체크!!)
2. 내가 현재 있는 위치가 벽은 아닌데 이동은 가능하고, 이동은 가능한데 길은 아니렸다? 
3. 그때의 이벤트는? 순간이동!

2. 소스


이미 Tile based games의 소스와는 멀어져가고 있다... ㅠ ㅠ
나름대로의 방식을 가지고 소신있게 짜야지!

가) Check Corner
public void Init() {
	m_Data = new DataMgr(Ctx);
		
	stage_1 = new MAP_Stage_1(10, 6);
	stage_2 = new MAP_Stage_2(10, 6);
		
	map = stage_1;
	mCurrentMap = 2;
		
	mUI = new UI_Main(Ctx);
	mHero = new Hero(1,1,DataMgr.HERO_WIDTH,DataMgr.HERO_HEIGHT);
}

위에서도 말했지만 우리는 change_scene이란 함수를 이용해 scnen을 새로 불러올 수 있기 때문에 간단한 MAP이동은 오히려 더 안좋을 수 있다. 더욱이 간단한 리소스를 사용한다면 동적 생성보다는 나을 거란 생각에 생성시 MAP을 다 만들어 주었다.

나의 양손에 맵이 다 들려있는 것과 마찬가지!! 움화화화화!!

mCurrentMap 이란 변수를 통해 현재 내가 어떤 맵에 있는지 확인 한다.
부모 map을 가지고 stage_1 맵을 일단 할당한다.
public void CheckCorner() {
		
	switch(mCurrentMap) {
	case 2 :
		mHero.getMyCorner(stage_1);
		break;
	case 3:
		mHero.getMyCorner(stage_2);
		break;
	default:
		break;
	}
		
	if(mHero.getObjCurrTileState() > 1) {
		Map_Change();
	}
}
	
public void Do() {
	// TODO Auto-generated method stub
	CheckCorner();
	mHero.Action();
}

Hero의 Corner 체크를 할 때마다 Tile State도 함께 체크해준다. 또한 맵도 여러가지니 맵 종류에 따라 corner체크도 별도로 하게 해준다. 하면 할 수록 소스가 지저분해지고 있다!!! 의익 ㅠ

public void Map_Change() {
		
	mCurrentMap = mHero.getObjCurrTileState();
	switch(mCurrentMap) {
	case 2 :
		mHero.setMapPosition(1, 4);
		map = stage_2;
		mCurrentMap = 3;
		break;
	case 3:
		mHero.setMapPosition(8, 4);
		map = stage_1;
		mCurrentMap = 2;
		break;
	default:
		break;
	}
}
State가 다음으로 이동되게 하는 door라면 이제 Map_Change()를 이용해서 map 정보를 바꿔준다. 소스 내용을 보면 어느정도 이해가 갈것이다.

이렇게 해서 open the door는 간단하게 해결이 되었다.
이제 그 다음 장을 봐야 하는데 업무를 하느라 아직도 못봤다.
서둘러 올려야 겠다.

추신 : 매주 마다 한편씩 이란건 없습니다. 마음 내킬 때 시간 생길 때 꾸준히 하고 있는 스터디라 포스트가 올라오는 시기가 각각 다릅니다. 죄송합니다.
댓글
댓글쓰기 폼