새벽 2시. 장기의 졸, 체스의 폰과 같은 역활을 하는 나비아드랩의 구울드를 화면에 뿌리고.
원하는 구울드 선택 후 이동가능한 지역 표시를 구현하는데..
발견한 문제들
1. 알파값이 제대로 먹지않는다?!
* SDL_Buffer라이브러리를 사용하는데 SDL_SetAlpha 함수를 사용했더니....
SDL_Buffer를 통해 이미지를 확대 축소한 이미지를 그렸더니.. 뒷배경이 검은 색에 의존한체 알파가 적용되었다.
검은 배경에 B이미지를 그리고 그위에 A이미지를 그리는데. A이미지에 알파를 적용 시키면 B이미지와 겹쳐져 반투명하게 보여야하는데
검은 배경과 겹쳐져 검정색으로 나온다.
...........왜 그러는지를 대충 알것 같긴하지만 아직 정확히 모르고 해결 못했으므로 패스.
2. 구조체를 통째로 뜯어 고치다.
* 별건 아니다. 그냥 어제 하루종일 작업한걸 그냥 날리는 것뿐이랄까 :) 아 행복해.
....왜 날리느냐! 라고 묻는다면 처음 구조를 잘못짠 내가 바보요.
우선 Unit라는 구조체를 선언. 그안에는
이미지, 자원, 유닛타입, 유닛종류번호, X,Y좌표, 현재 위치한 보드타입.
등을 지니고 있었고.
Board라는 게임 보드판에는 X,Y좌표, 보드타입
이렇게 가지고 있었다.
...........그리고 board[7][7]이라는 배열도 있었고.
열심히 코딩을 하고 보니 뭔가 이상하다. 유닛이 이동하려고 Unit.X와 Y를 증가 시키고, 증가된 좌표를 가지고 board[X][Y]에
다시 유닛 번호를 입력하고. 뭔가 2번 쓸데없이 일하는 느낌.
그리고 무엇보다 이동을 체크할때..내 앞타일을 비교하는데 현재 내좌표에 +를 시켜서 보드 좌표에서 자기 앞을 체크한다.
이건 뭔가 아니다 싶어.(...사실 실시간이라면 각각의 좌표와 보드판의 좌표도 필요하겠지만..)
한참을 고민한끝에 새벽 2시에 구조를 바꾸었다. 물론 짜증이 밀려왔다 :)
그동안 작성한 코딩의 뭐 사실 100줄도 안되는 분량이니까 괜찮아. 그냥 단지 구조가 바뀌어서 전체적으로 자잘하게 수정한것뿐.
바뀐구조가 더 단순하다.
board[7][7]안에 0이면 빈공간 1~XX번호대까지는 해당 유닛.
그리고 아군과 적군의 똑같은 구울드라도 전혀 다를 존재로 봐야하므로 번호도 다르게 사용하기로 했다.
유닛종류가 많으므로어떻게 구분지을까.. 하다가 tydef enum으로 선언.
1~50번까진 아군 51~100번까진 적군, 아군 적군 식별은 50보다 크냐 작냐로 구분.
물론 이미지는 이차원 배열로
img[2][50] 으로 되어있다.
board[7][7]에 0이 들어있다면 그건 빈공간이니 패스.
1이 들어오면 아군 유닛 구울드img[0][0] 을 그리고 51이들어오면 51%50 을가지고 img[1][0]을 그린다.
...아 1~50번이지만 이미지는 0~49번이다. 여튼 구조를 이렇게 바꾸기로하고.
유닛은 이제 이미지와 타입, 가지고있는 자원만 존재한다. 좌표는 신경쓰지 않기로 했다.
3. 이렇게 적어놓는 이유는...
잊기전에 다음에 같은 실수를 하지 않기 위해서..?
'IT이야기 > NDProject' 카테고리의 다른 글
당분간 보류.. (0) | 2009.08.17 |
---|---|
나비아드랩 오늘의 결과물.. (0) | 2009.06.16 |
1주일의 결과물.. (0) | 2009.06.12 |
나비아 드랩 PC버전 프로젝트!!! (0) | 2009.06.05 |