이전 스프라이트툴 을 만들고 어언 수개월 (3개월밖에않됬다니..) 동안 써보니
몇가지의 문제점을 알게되었습니다.

문제점

이전 스프라이트툴 같은경우에는 그림파일+애니메이션영역값의 식으로 파일에 저장이됩니다.
용량이 그림파일의용량+애니메이션정보의용량 이런식으로 되겠죠.
그렇다면 아래의 사진들을 봅시다.  
아래의 사진들을 보면 두사진의 애니메이션영역의 값이 항상 같습니다.

사진 1-1 RPG만들기

사용자 삽입 이미지

사진 1-2 RPG만들기

만약 게임이 이런식으로 일정한 애니메이션영역의 정보를 사용하게 된다면
불필요하게 같은 정보를 저장하여 메모리를 낭비하게될수도있습니다.

문제의 해결방법

뭐 개인적으로 생각한 방법인데 그림파일의 정보와 애니메이션 영역의 정보를
각각 분리시켜서 저장하는것입니다.
뭐 물론 리소스의 패킹은 셀프죠 ㅎ_ㅎ...
뭐 이런식으로 저장하면 프로그래밍소스 혹은 스크립트 레벨상에서
그림파일과 영역파일을 알아서 연결할수있게 구성해주면될것같습니다.

이런식으로 하면 만약 다른 그림파일로 같은 애니메이션의 영역정보를
쓰는경우가 많은경우에 이전의 스프라이트툴 보다 많은 용량 절감을 할수있다고 생각합니다.

추가밑 변경될 사항

그리고 기존의 스프라이트툴은 확대해서 RECT값을 드래그로 딴후 중점정보를 바꾸는등의
노가다(드래그로RECT값따는게 제일노가다)로 애니메이션을 완성햇어야했는데
최근에 GNEX SDK 속에 있는 ImageMaster라는 툴을 사용해봤는데
처음 보는 방식으로 RECT 값을 따내길래 신기해 하였습니다. =ㅇ=
뭐 비슷하긴 하지만 편의성이 UP 될듯한 기능이더라구요.

밑의 사진처럼 그냥 스프라이트를 포함한 일정영역을 드래그시 딱 스프라이트의 크기에
RECT을 맞춰주는겁니다... 우왕굳 ... 뭔가 알고리즘 적인 부분이 들어갔을듯한데
사용자 삽입 이미지
대략 무지한 저로선 ㅠ_ㅠ...

이것들 이외에 추가밑 변경될 사항들이 더있는데 포스팅하다 졸려서 자야겠군요 =ㅇ=..
음음 새로만들어질 스프라이트툴은 앞으로 다시 만들어지는일이없길 빌며..
[##_kaAmo_##]

Posted by 랜스.

Leave your greetings here.

  1. Comment RSS : http://lancekun.com/tc/rss/comment/49
  2. 날자고도 2009/04/20 13:56  Modify/Delete  Reply  Address

    픽셀을 검사해서 알파값이 0이면 라인을 줄여나가는 방식입니다.

  3. 닭도난다 2009/04/20 16:13  Modify/Delete  Reply  Address

    날자고도님 의견에 한표, 픽셀 값 계산을 해주면 될듯요.

  4. 랜스 2009/04/20 16:50  Modify/Delete  Reply  Address

    아앗...이렇게도 할수있겟군요~~ GPG 에 질문올렸었는데 답변떠서 날자고도님 답변보기전에 이미 그방법으로 해결했다는.. 감사합니다!

  5. 날자고도 2009/04/20 19:59  Modify/Delete  Reply  Address

    같은 말이죠.
    알파값이 0이면 아닐때까지 찾거나,
    투명한색을 제외한 색을 찾거나..

  6. 나무 2009/04/21 15:31  Modify/Delete  Reply  Address

    두가지 방법으로 다하는게 좋습니다. 영역을 죽이면서 이미지영역을 따는 방법과 이미지부분을 클릭시 점점 확대하면서 이미지영역을 따는방법으로요 그리고 이미지 임포터에서 자동으로 적용하여 이미지를 불러드리는 적시 줄어들며 영역을 따는것도 있으면 편합니다.
    생각하기 나름이긴하지만 최대한 사용상 편의가 가장중요한게 툴이기도하고
    데이타를 쓰기쉽게 구조화하는것도 필요하겠죠. 게임상에서 계산할것을 최대한 줄이는
    응용기능들은 미덕이죠: )
    전 아직 10년전에 만든 스프라이트툴을 쓰고있는데 툴이란게 잘만들어두면 두고두고 유용한거같아요.

  7. 나무 2009/04/21 15:33  Modify/Delete  Reply  Address

    아 3D로 오고나서 조각이미지를많이 만드는게 좀 위험해쪘죠. 텍스쳐를 만드는 갯수가 많아지면 퍼포먼스가 많이 낮아집니다. 특히나 텍스쳐를 생성할시나 해제시에요. 작고 많은 수의 텍스쳐보단 큰 몇개의 텍스쳐가 용의하다는 : )

  8. 랜스 2009/04/23 16:08  Modify/Delete  Reply  Address

    오오.. 날자고도님 나무님 답변모두 감사합니다.~

사용자 삽입 이미지
이번엔 만들어준 윈도우들의 기능을 하나하나 만들어 주려합니다.
일단 젤 왼쪽에 붙어있는 전체적으로 관리의 기능을 하는 관리자윈도우에 필요한기능은
파일을 불러왔을때 파일의 정보를 알려주거나 애니메이션추가,이름변경,프레임추가,컬러키설정
과 같은일을 담당하면될것같습니다.
그러면 한번 이제 윈도우에 컨트롤들을 만들어 배치해보겠습니다.
[##_kaAmo_##]

Posted by 랜스.

Leave your greetings here.

  1. Comment RSS : http://lancekun.com/tc/rss/comment/6
  2. Kell 2009/02/03 14:10  Modify/Delete  Reply  Address

    아참, 그리고 스프라이트툴을 만드신다니 생각나는게 있는데요.

    각 프레임 별로 애니메이션 갱신속도를 따로 설정할 수 있는 인터페이스를 마련하시는게 좋습니다.

    그래야 스프라이트를 효율적으로 아끼면서 리얼한 스프라이트를 만드는데 조금은 더 도움이 됩니다. 부드럽게 움직이다가 살짝 끊긴 느낌의 스프라이트도 출력을 해주고 ( 격투 게임의 경우 Hit 했을 때의 경직 느낌 정도.. )

자 저번에 파일의 구조를 모델링해봤습니다...(누구랑말하니....)
이번엔 기본적인 윈도우의 화면을 구성해보려합니다.
그렇다면 다시 다른분의 스프라이트툴을 분석해봅시다...

사용자 삽입 이미지
1번윈도우는 마우스의 현재위치와 파일의 정보 그리고 스프라이트 애니메이션의 생성과 삭제
그리고 이름변경 또 컬러키적용과 애니메이션의 속도에 관한 설정을 할수있도록 만들어진창이네요
2번윈도우는 그림파일을 불러와서 화면에 띄어주는 윈도우네요. 가로 세로로 스크롤바가 있네요.
3번윈도우는 프레임들에대한 위치수정을 할수있는 윈도우로 보여지고 2번처럼 가로세로로 스크롤바가 있습니다.
4번 윈도우는 애니메이션을 보여주는 윈도우같구요
5번 윈도우는 중점좌표를 설정해주는 윈도우 같습니다.

자 그러면 이제 대충 우리가 만들어줘야하는 윈도우의 모습이 보이는데요
이젠 어떤식으로 코드를 작성할지 고민해봐야겠는데요
하나의 윈도우클래스를 제작하고 그것으로 여러개의 윈도우를 다른속성으로 만들지
아니면 윈도우마다 제각기 다른윈도우를 만들어 줄지말이죠.

나중에 만약 추가윈도우를 구성할때를 생각해보면 위의 두방법 말고
한개의 컴포넌트윈도우를 만들고 윈도우마다 그것을 상속받아 각자의 특성에 맞게
작동하게 구성하면 될것같다.

사용자 삽입 이미지
이제 추상윈도우 클래스를 구성했다.
그럼 이제 5~6가지 이 클래스를 상속받는 클래스들을 만든후 화면에 배치해보겠다.

사용자 삽입 이미지
대충 5개의 윈도우들을 구성하고 화면에 배치해보았다. 크기조절에 관한문제도 해결하였다
지금은 그냥 각각의 윈도우에서 각자의 역활을 텍스트로 띄어주었다.
킁 다음번엔 저 5개의 빈윈도우들을 하나하나 내용을 채워보도록하겠다

[##_kaAmo_##]
Posted by 랜스.

Leave your greetings here.

스프라이트툴이라 함은 곧 게임툴!! 게임에서 쓰이게 될 리소스들을 수정하고 편집하는데 쓰이게될껍니다.!!
리소스들을 수정하고 저장하게 되면 무엇이 생성되죠? 예 그렇습니다. 파일이죠~_~ (혼자묻고 혼자답하기)
예전에 스프라이트툴을 만들기전에 2D그래픽 기초를 하고있었을때는 그림파일따로 프레임값을 저장해둔 텍
스트파일 따로 따로 저장하거나 아예 프로그램상에 넣어놨었는데 이게 게임개발하다보면 귀찮은일이란걸
깨닫게 되어서 이젠 우리가 만들 파일의 구조를 모델링 해보도록해요.~_~

사용자 삽입 이미지
 일단 스프라이트 파일을 전체적으로 생각해봅시다~_~
스프라이트 파일은 크게 애니메이션의 정보와 그외것들(컬러키,그림파일)을 담는것 두가지로 나눌수있
겠구요.
사용자 삽입 이미지
애니메이션객체속에는 애니메이션이 담고있는 프레임의 리스트가있어야겠죠?
프레임은 스프라이트의 아주 기본이되는 데이터객체입니다.
영역정보와 중점정보를 데이터로 저장하고있어야합니다. 에휴 말이랑 그림으로 떼울려니 좀 어렵네요.

그럼 방금까지 생각했던것을 정리해서 모델링해봅시다 ~_~
사용자 삽입 이미지

자 이번에는 제가 만들게될 스프라이트툴의 파일구조를 모델링해보았습니다... 다음시간엔 이것을 그대로 코드에 옮기고 파서를 만들어 볼까 합니다~_~ 잘했어 랜스군!
[##_kaAmo_##]
Posted by 랜스.

Leave your greetings here.

  1. Comment RSS : http://lancekun.com/tc/rss/comment/4
  2. Kell 2009/02/03 14:03  Modify/Delete  Reply  Address

    예전에 이와 비슷한 방식으로 스프라이트 데이타를 구성한적이 있었는데요. 뭐 나쁘진 않았으나 비트맵을 사용하다보니 아무래도 리소스 크기가 커지고,

    비트맵 데이타가 직접 데이타 포맷에 포함되다 보니 리소스 변경만으로 노려볼 수 있는 효과(같은 크기의 비트맵의 다른 캐릭터), 리소스는 냅두고 여러가지 프레임을 생성하는 효과 등등을 효율적으로 관리하지 못했던게 생각이 납니다..;

    또 중간에 데이타를 교체해야 하는 경우도 관리하기가 힘들었던 생각이 나네요. (툴에 그 기능을 추가하긴 했지만..;)

Kell's SpriteTool

Kell's SpriteTool

 위쪽의 사진을 보며 스프라이트 툴에서 필요한 기능들을 생각해보자.

첫째로 기본적인 파일을 불러오고 기능이있어야할것이다.
또 불러온 파일을 수정후 저장하는 기능도 있어야겠지?
불러온 파일의 정보를 읽어서 보려주는 기능도 있으면 괜찮겠다.

자 그럼 둘째로 기능적인 면을 생각해보면 스프라이트 그림을 클릭한후 드래그 하면 그 영역(RECT)를
저장하는 리스트가 필요할껏같다. 그러면 그 리스트의 갯수와 한도를 정하는 부분도 필요할꺼고
그 영역을 통채로 관리하려면 하나의 개념체로 관리를 해야할것이다. 그리고 그 개념체를 생성시키고
이름을 정하게할수있는 기능도 필요할것이다.

그리고 이제 마지막으로 이미지의 컬러키정보를 담는 기능과 다 만들어진 스프라이트 애니메이션을
보여주는 윈도우를 남겨두는것도 괜찮을것이다.
[##_kaAmo_##]
Posted by 랜스.

Leave your greetings here.

저번에 만들었던 Kyma스프라이트툴의 소스가 날라가버리고 실행프로그램만 남았기에
이번에 스프라이트툴을 새로만들어볼까합니다. -_-
사실 저번에 만들었던 스프라이트툴이 개막장이라 유지/보수가 힘든 이유도 있었고
포맷할때 고의적으로 남겨두었달까... 젠장 ㅠㅠ
고로 이번엔 쓸만하면서도 나중에 유지/보수가 어렵지않은 스프라이트 툴을 제작해보기로 하겠습니다.
자 그럼 일단 무작정 코드를 짜던 습관을 버리려고 이런 글을 쓰면서 제작하기로 한거니
일단 개발하려는 프로그램의 목적부터 생각해봅시다.

개발목적
 - 앞으로 제작하게될 2D스프라이트툴의 컴포넌트가 될 프로그램을 제작한다.

개발시 유의점
- 차후에 개발될 게임에 쓰이게될 스프라이트툴이 컴포넌트가 되는 만큼 확장성에 유의한다.
- 고로 이 스프라이트툴로 제작된 파일을 아류 스프라이트툴들도 로드할수있게 제작하여야한다.
- 최적화에 신경을 쓰되 설계시 최대한 모듈화에 힘쓴다.

정도가 프로젝트의 개요가 되겠다... 뭐 프로젝트라 하기엔 너무 작은 프로그램이라..
이런식으로 대충 목표와 개요가 정해졌고 그다음엔 설계 작업을 해야할꺼같은데
설계라는 구조적인 디자인을 해보기전에 다른 사람들이 만든 몇가지 스프라이트툴을 참고해보자

Kell's Sprite Tool

Kell's Sprite Tool

이 툴은 Kell(http://kell.tistory.com)님이 만드신 스프라이트 툴이다.
파일을 불러와서 정보를 저장하고 그 파일의 정보와 이미지를 출력하고 애니메이션을 추가하여
사용자가 직접 애니메이션의 중점정보와 프레임속도를 지정해줄수있다.

켜켜's Sprite Tool

켜켜's Sprite Tool

이것은 켜켜(http://cafe.naver.com/kilius)님이 만드신 스프라이트툴인데
기본스프라이트툴에 격투게임의 특성인 바인딩 박스(사각충돌)이 추가 되어있는 툴이다.
이런류의 툴은 스프라이트툴을 기본으로 각자 게임의 특성에 따라서 이런식으로 변형될수있다는 예를
보여주는 적절한 툴인것같다.
 
자 2가지의 스프라이트 툴을 구경하였다. 다음시간엔  Kell님의 스프라이트툴을 이번에 제작하게 될
기본 컴포넌트가 될 스프라이트 툴이라 생각하고 켜켜님의 스프라이트툴을 컴포넌트에 무언가
게임의 속성을 덧붙이게 될 스프라이트툴이라고 생각하고 설계에 임해보기로하자.

[##_kaAmo_##]
Posted by 랜스.

Leave your greetings here.

  1. Comment RSS : http://lancekun.com/tc/rss/comment/2
  2. 비밀방문자 2013/12/31 15:02  Modify/Delete  Reply  Address

    관리자만 볼 수 있는 댓글입니다.