Ebiten으로 간단한 게임을 구현해보려고 하는데 이번에는 그래픽 리소스를 직접 만들어보고 싶었다.
개인적으로 픽셀 감성을 좋아해서 픽셀을 찍어보려고 하기는 하는데 역시 쉽지 않다;;
뭐가 되었든 테스트용으로 간단한 픽셀 스프라이트를 Asesprite로 찍을 수 있었다.
Asesprite를 export 하면 json 파일과 png 파일을 뽑을 수 있는데
이 데이터를 읽어서 스프라이트 애니메이션을 구현해야 한다.
뽑힌 데이터들을 보니 애니메이션을 구현할만한 정보는 모두 포함되어 있었다.
그래서 일단 json 정보를 읽어보는것을 먼저 해보기로 했다.
검색해보니 기본적으로 'encoding/json' 패키지를 제공하고 있었고 다른 분이 만든 gson도 유명해보였다.
goasesprite라는 패키지도 있는데 (내부에서 gson을 이용해서 파싱) 테스트해보니 바로 애니메이션이 잘 동작했지만
json 읽는 부분도 연습해볼겸 직접 로드해보기로 했다.
일단 기본 흐름은 os.Open()으로 파일을 읽고 ioutil.ReadAll()로 []byte로 변경한뒤 json.Unmarshal()로 읽어오면된다.
Unmarshal을 하기 위해 json struct를 만들어주고 json의 key값을 연결해주어야 한다.
예를 들어 asesprite json에 있는 Meta 부분의 정보를 읽어오려면
type FrameTag struct {
...
}
type Meta struct {
App string `json:"app"` // meta.app을 읽어온다.
...
Img string `json:"image"` // meta.image를 읽어온다.
...
FrameTags []FrameTag `json:"FrameTag"` // meta.FrameTag을 읽어온다. (배열)
}
위와 같이 `json:"app"`과 같이 json의 키를 직접 입력해주어야 한다.
FrameTag와 같이 기본 타입이 아니라면 그에 맞는 struct를 추가해서 읽어줘야 하고 배열이라면 배열로 잡아야 한다.
Meta정보와 다르게 Frame은 배열이 아니라 Map의 형태로 되어있다.
이때는 Frames map[string]Frame `json:"frames"` 와 같이 map으로 읽으면 된다.
이 정도만 되어도 일단 원하는 데이터는 다 읽어올 수 있었다.
다음에는 이 데이터를 이용해서 애니메이션을 구현해봐야겠다.
'프로그래밍 > Go' 카테고리의 다른 글
Go - Ebiten TTF 폰트 사용하기 (0) | 2022.04.17 |
---|---|
Go 언어 환경설정 간단 정리(IDE - VS Code) (0) | 2022.03.19 |