이제 5일차에 들어섰다..!!

 예제를 보며 코드를 작성하던 중, 텍스쳐 매니저를 갑자기 쓰는데 설명 하나 없어 급 당황. '나는 이 책을 왜 읽는걸까?'라는 의문을 떠올리며 저자를 향한 수많은 욕과 저주를 내뱉었는데 헤더 파일을 생성하려고 하니 같은 이름 파일이 있다는 에러가 떴다. 열어보니 이미 훨씬 전에 만들어 놓은데다가 잘만 쓰고 있었다!!!!!!!1 왜 새롭게 느껴졌을까.. 난 치X가 온 것이 분명하다...


  • 게임 내 상태를 관리하는 FSM(날아다니는 스파게티 뭐시기 말고)을 만들었다.
  • 버튼 객체를 만들고 마우스 움직임에 따라 버튼의 텍스쳐가 바뀌도록 했다.
  • 클릭시 수행 할 함수 포인터를 추가했다. 내가 전에 버튼 만들 적에 생각해냈던 방법이랑 완전히 똑같다!! 내가 작년엔 참 총명했군.......
  • 속도의 방향에 따라 이미지를 뒤집도록 했다. 아직 모션을 바꾸는 기능은 만들지 못했지만..
  • 일시정지 화면을 만듦. 스테이트 머신이 약간 특이한게 스택 구조로 되어 있다.
    • 화면 상 나타나는 state는 무조건 스택(실제론 벡터이지만)의 최상단이다.
    • 현재 스택에 들어있고, 처리되는 state를 A라고 하자.
    • A 위에 다른 장면인 B를 push하면 B가 현재 처리되는 state가 된다. (A는 FSM 스택 내부에 존재)
    • Pop하게 되면 B state가 사라지고 A가 최상단이 되어 화면에 나타난다.
    • 우왕ㅋ굳ㅋ A 내 객체는 B가 상단이 되더라도 다 남아있기 때문에 값이 그대로 보존되어 있다.
    • 사실 말은 간단하게 해놨지만 장면을 pop 혹은 교체 할 때 내부 객체들, 미쳐날뛰는 포인터, 텍스쳐들을 잘 처리해주어야 한다. 안 그러면 메모리가 와장창..


일단 오늘은 이정도만.....

'프로젝트 일지 > 게임 프로그래밍' 카테고리의 다른 글

심심풀이 습작 - 7일차  (0) 2015.10.18
심심풀이 습작 - 6일차  (1) 2015.10.11
심심풀이 습작 - 4일차  (0) 2015.10.09
심심풀이 습작 - 3일차  (0) 2015.10.07
심심풀이 습작 - 2일차  (0) 2015.09.25

 어제인가 그저께인가에 이어서 작업. 입력을 받는 부분 위주로 만들었다.

 그리고 앞서 2015/09/25 - [프로젝트 일지/게임 프로그래밍] - 심심풀이 습작 - 2일차 에서 책을 좋게 평가했는데, 진행하다보니 문제가 많다.

책이 몇 판인지는 모르겠지만(사실 개정판은 없을 것 같다) 간간히 오류가 있고, 내가 놓쳤는지 아무리 책을 뒤져도 내용이 나오질 않는 함수가 있다. 뭘까 이거.. 대충 이런 함수겠거니 하고 만들긴 했지만 은근 신경쓰인다. 이것 뿐만 아니라 전체적으로 설명이 좀 빈약하고 오류가 있음. 컴파일이 안될 수 밖에 없는 코드가 예제로 들어가있을때는 이 저자는 대체 소스를 어디서 어떻게 만들어내는지 궁금하기도 하다. 완성품을 다 만든 상태에서 대충대충 과정을 보여주느라 그런걸까?

 원서라 영알못인 내가 감히 이렇게 평가를 내는 게 꺼림칙해서 아마존 쪽 리뷰도 찾아봄. "발상은 좋았으나 세련됨이 딸린다.", "이 책의 코드는 버그로 가득차 있다!"(....). 그래도 시작한 이상 끝은 봐야겠지........


오늘한 것

  • 조이스틱을 초기화하고 입력을 받을 수 있도록 함. 사실 키보드로 만드는 게 정석일텐데, 어쩌다보니 이렇게 되었다. 키보드로 바꾸는거야 간단하지만 처음에는 조이스틱용 코드인지도 모르고 그냥 치다가 중간부터 '응...?' 싶었다. 새로운 경험이 될 듯.
  • 입력에 따라 움직......일 터인데...분명 상하좌우만 움직이는데 뭔가 이상하다. 어째서인지 대각선으로 간..다?
    • 혹시 조이스틱 문제인가 싶어서 장치관리자에서 입력을 따로 확인해보았는데 딱히 보이는 문제는 없음......
    • 이상한 점이 많은 게 0,1,3,4번축을 입력으로 받는데(예제상) 0번축만 조작했는데 뜬금없이 1번축도 조작이 들어온다.
    • 보통 0번축이 x축, 1번축은 y축 이렇게 사용될텐데 내가 쓰는 조이스틱은 뜬금없이 4번축을 y축으로 사용한다;;
    • 짜증나서 걍 1번축 3번축을 주석처리했다. 1번 축 입력은 대체 왜 잡히는 것일까. 다른 조이스틱도 확인해보고 싶은데 찾기가 귀찮은 관계로 생략.. 일단은 해결됨.
  • 마우스 입력을 처리하자니 갑자기 화가 나기 시작한다. 시부럴 글을 쓰는 지금 어디선가 폭죽을 터뜨리는 것 까지 짜증난다. 왜 폭죽질이여! 마우스 입력 하나하나까지 벡터로 받아서 처리하는 저 깐깐함이 짜증나는 것이다.
  • 키보드 입력을 받아 이동하는 부분을 만들었다. SDL_GetKeyboardState 함수를 이용하면 편하게 만들 수 있다는 사실을 알게 되었다.
    • 해당 함수는 const Uint8 *를 반환하는 함수이다. 이걸 받아 배열처럼 사용하고(Uint8*로 캐스팅할 것), 인덱스는 SDL_SCANCODE 상수로 사용하면된다.
      • if( m_pKeyState[_key] == 1 ) 이런식으로 말이다. 여기서 _key에 들어가는 값은 앞서 말했다시피 SDL_SCANCODE값.
  • 코드 정리. 약간 짜증나는 게 있다...........왜 갑자기 소스를 참고하라며 생략이 되는 것인가....이거때문에 코드 좀 갈아엎었는데... 심지어 함수 두개는 어떻게 쓰는지 알려주지도 않아..... 빌어먹을 예제는 일일이 사이트에 들어가 이메일이랑 이름을 쳐서 메일로 들어가 받아야 하고 말이다.
  • 게임 상태를 관리하는 부분에 들어가기 시작해따..


투 비 컨티뉴드...... 벌써 책의 절반 가까이 왔다. 한 게 아무것도 없는 것 같은데..

'프로젝트 일지 > 게임 프로그래밍' 카테고리의 다른 글

심심풀이 습작 - 6일차  (1) 2015.10.11
심심풀이 습작 - 5일차  (0) 2015.10.09
심심풀이 습작 - 3일차  (0) 2015.10.07
심심풀이 습작 - 2일차  (0) 2015.09.25
심심풀이 습작 - 1일차  (0) 2015.09.24

이래저래 잉여짓을 하다 다시 돌아왔다. 벡터 부분을 추가했는데, 물리쪽은 젬병이라 이게 뭔 개소린지 이해하는 데 한참 오래 걸리는 것 같다. 선형대수 할 때 비슷한 걸 하긴 했는데 말이지.....?.... 아무튼 그거와 별개로도 간단한 문제에 많이 막혔다. 진짜 치X가 오나... 코뼈가 심하게 휜 사람은 뇌에 산소가 부족해서 기억력이 약해진다던데 레알인 것 같다. 내가 이정도로 멍청할 리 없다.ㅠㅠ


오늘 한 것들

  1. 벡터 클래스 연산자 오버로딩(은 사실 오늘 처음 해봤다...... 편하고 좋은듯)
  2. 가속도 부분 추가
  3. 뜬금없는 컴파일 오류 해결
    1. 사용할 수 있는 기본 생성자가 없습니다. 라는 문구와 함께 컴파일이 안됨.
    2. 컴파일이 잘 되던 코드였음. 객체를 하나 더 만드니 컴파일이 안되기 시작.
    3. 원인 -> 걍 말 그대로 기본 생성자가 없었음........ Class(){} 식으로 추가하니 해결 됨(당연하게도). 민망해.
  4. fixed frame per second 추가. 생각보다 되게 루틴이 단순했다.
    1. 보통 딜레이 함수는 ms단위로 있음. 1초는 1000ms. 보통 게임은 60FPS로 동작함. 그럼 우리가 해야할 일은->"1초에 60번 갱신하도록 한다"
    2. 상수를 만든다. 단순히 1000 / FPS값이면 된다. 얘를 DELAY_TIME이라고 부른다 치자.
    3. 게임 내 루프는 대체로 event, update, render 순임. 루프의 시작에는 현재 경과 ms값을 몇몇 함수를 이용해 받아오고(SDL에서는 SDL_GetTicks()를 쓰면 됨), 끝에는 끝난 시점 기준 ms값에서 시작ms값을 뺀 값을 가져온다. 얘를 frameTime이라고 치자.
    4. 루프 끝자락에 DELAY_TIME보다 frameTime이 작은 경우 DELAY_TIME - frameTime 만큼 대기하는 코드를 넣어주면 된다.
  5. InputHandler 추가. 이름은 핸들러인데 정작 싱글톤이다. 아니면 원래 핸들러=싱글톤인건가. 지금까지 싱글톤을 굉장히 많이 쓴 느낌이다.?


2일차 때와 비교해서 겉으로 크게 두드러지는 차이점은 없으므로 스샷은 생략.

이제 점점 이동 파트에 들어갈 것 같다! 개인적으로 횡스크롤은 조작감을 많이 따지는데, 특유의 부드러운 가속 움직임은 은근히 만들기 힘든 것 같다. 상용 게임도 조작감이 굉장히 나쁜 경우를 많이 보았기도 하고. 생각해보면 슈퍼마리오는 그런 장르의 시초격임에도 불구하고 독보적인 정석이 아닌가 싶다.

+ Recent posts