2019년 4월 11일 목요일

[20190411] Render 2 Texture Manager

날이 좋습니다.
몹시 너무 완벽하게 좋네요.
덕분에 거의 매일 산책을 가고 있습니다.
언제 미세먼지의 역습이 시작될지 모를일이니 지금 부지런히 다녀둘랍니다.
( '_')y-~



작업 이야기로 들어갑니다.
이 일지는 4월 3일 ~ 5일, 8일 ~ 10일 작업을 대상으로 합니다.

작업 내역은...
  1. 장비 내구도를 Stat 으로 전환
  2. 장비 파괴 Log 출력
  3. Render to Texture Manager 추가
...입니다.


1. 장비 내구도를 Stat 으로 전환

지난 일지에 <장비 내구도> 를 작업했다고 남겼었죠. 이 녀석은 Stat으로 넣기에는 어중간해서 고민 끝에 별도의 요소로 작업했었습니다.

작업을 마친 다음날 고민을 해봤습니다.

'속성이 추가되면 멤버변수를 하나씩 늘려나갈건가?'
'추가된 속성을 table에서 읽을껀데 매번 parsing 코드 작성할거야?"
'1인 개발이잖아. 번거로운 일을 최대한 줄이는 것이 맞는 방향 아니야?"

이런 고민 끝에...
Statistics Type 에 Durability 를 추가해서 <장비 내구도> 에 활용하고
각각의 Statistics Type에 속성을 부여해서 제약을 거는 것으로 관련 기능을 정리했습니다.

속성에 대한 설명을 약간 해보자면...

기존의 Statistics 관리 기능은 Item을 장비하면 해당 Item이 가진 Statistics List를 장비한 Actor의 Statistics Manager에 넘겨 줍니다. 그러면 Item이 넘겨준 Stat이 Actor의 Stat 에 합산되어 사용되는 구조입니다.

하지만 아이템의 <내구도> 는 그런식으로 작동해서는 안되겠죠.
Actor에는 <내구도>가 없을뿐만 아니라 있더라도 Item의 <내구도> 와 Actor의 <내구도> 는 서로 영향을 줘선 안됩니다.

그리하여 Stat에 <관계> 속성을 추가했고, 이 속성이 <고립> 이라면 Manager 에서 사용되지 않도록 작업했습니다.

덤으로...


UI 문제도 해결되었습니다. Icon 작업은 해야겠지만요. ( +_+)y-~



2. 장비 파괴 Log 출력

내구도 소모로 Item이 파괴되면 Event Log 를 출력합니다.


그렇습니다.



3. Render to Texture Manager 추가

이 일지가 6일간의 작업을 대상으로 하는데 그중에 5일이 이 작업에 투입되었습니다.

특정 시점부터 cocos2d-x 엔진은 3D 기능과 cocos creator에 집중하고 있습니다.
덕분에 기본적인 기능의 개선이 부실합니다.
( 그래도 Sprite::setTexture 함수 쓰면 Shader 초기화 하는 이상한 코드는 고쳐놨더군요. )

이 작업은 개선되지 않고 방치되는 것들 중에 Render to Texture 기능의 맘편한 사용을 위한 작업입니다.

cocos2d-x는 RenderTexture 라는 특수한 Node를 제공합니다.
이 녀석은 자식 Node로 추가된 Node들을 Texture로 뽑아줍니다.

어째서 이걸 Node로 만들어 뒀는지가 우선 이해할 수 없고, Render를 위한 Camera 세팅은 왜 이리도 거지 같은지 또한 이해할 수 없는 부분이지만... 엔진 까는게 목표는 아니니까 넘어가겠습니다.

추가된 Render to Texture Manager는 다음과 같은 이점을 제공합니다.
  1. 부모 Node없는 Node도 Render 가능
  2. 뽑혀나온 Texture는 위아래가 뒤집혀 있는데 이것을 미리 뒤집어서 Render
  3. Render Command를 수집하는 과정에 들어가기 이전에 작업을 마치기 때문에 RenderTexture 기능이 Node로 제공됨에 따라 발생하는 우선순위 문제 해결.
  4. 위와 같은 이유로 Render 대상에 이런 저런 양념이 가능
  5. 편리함.
...등 입니다.

Manager를 만드는 과정에서 이전에 RenderTexture Node를 사용한 곳들은 모두 대체되었습니다.

이렇게 같은 View를....


...여러 곳에 쓰는 것도 편해졌죠.

이 작업하면서 여러 이상한 것들을 발견했고... 녀석들은 여러모로 방해가 되었는데요.

그러다보니 이렇게 오래 걸릴 작업이 아니었는데도... 자신을 믿지 못한 어리석음에... 엔진에 대한 불신이 겹쳐서 일을 어렵게 만들어 버렸네요.
( o_o)y-~

코딩 시작한지 19년째인데도 이러는 것을 보면 단련할 부분이 아직도 너무나 많다는 생각이 듭니다.

Code를 정리해서 git에 올릴까 생각했는데... 최종적으로 어쩔지는 모르겠습니다.
전 사람들이 이 엔진( ? ) 안썼으면 좋겠거든요.



일지는 여기까지 입니다.

일지를 쓴다는 것은 참 좋습니다.
제가 한 일이 어떤 의미인지, 작업하면서 깨닫지 못한 것이 쓰다보면 알게되거든요.
이 너절한 일지가 개발을 시작하는 사람들에게 그런 도움을 주면 좋겠습니다.

그럼 저는 작업하러 갑니다.
( '_')y-~

> 8번 고침

댓글 4개:

  1. 장비 파괴 내구도는 HUD에도 표현이 될까요? 궁금합니다 ㅎㅎ
    저도 다음이 있다면 코코스를 써보고 싶어요. 다음이 있다면...
    늘 감사합니다- 의욕 안 날때마다 와서 읽고 힘내고 있어요. 저의 뮤즈십니다.
    계속 잘 부탁드립니다-

    답글삭제
    답글
    1. HUD에 표시도 고려하고 있습니다.
      언제 날 잡아서 갈아 엎으려구요.

      열심히 할게요. +_+

      삭제
  2. 오잉 이 Blogger라는 거에 무조건 연동이 되어야 하나봐요, 이젠? 갑자기 닉네임을 입력하라고 떠서 놀랬어요 ㅋㅋ

    답글삭제
    답글
    1. 구글플러스 날아가면서 뭔가 바뀌었나보네요. @_@

      삭제