TexturePacker 를 사용해 볼 것을 제안합니다.
- 모든 이미지를 드래그 앤 드롭하여 포장 할 수 있습니다.
- 다른 압축을 적용 할 수 있습니다. 예를 들어 메모리를 덜 소비하는 인덱스 된 PNG를 사용하십시오. 표준 PNG 파일에 비해 최대 70 % 더 적습니다.
- 각 건물의 이름 + 위치를 포함하는 파일 데이터 파일을 만들 수 있습니다
- 무료 버전은 이미 스프라이트 시트를 작성하기에 충분할 수 있습니다.
AndEngine, Cocos2d-x 또는 LibGdx와 같은 게임 개발 프레임 워크를 사용하십니까? => 없음
모든 이미지를 동시에로드해야합니까? 대상 장치에서 대규모 RAM 문제가 발생하는 것처럼 들립니다.
업데이트 : 뱀은 나에게 이미지를 보냈다. 약속 한대로 여기에 공개하지 않으므로 메모리 사용을 줄이는 방법을 보여주기 위해 직접 예술을 만들었습니다.
원본 이미지에서는 이미지의 한 부분 만 움직이고있었습니다. 나는 이것을 보여주기 위해 집에 새를 뒀다.
기본적으로 완전한 애니메이션을 시트에 포장하는 것은 큰 메모리 낭비입니다. 정적 부품과 움직이는 부품을 분리해야합니다.
공전:
애님 01 :
Anim02 :
이미지에서 새의 원래 위치를 유지하십시오 . 이것이 바로 위에 빈 공간이있는 이유입니다. 애니메이션을 정렬하려면 이것이 필요합니다.
이제 TexturePacker 에서 이미지를 드래그하고 다음 파라미터를 선택하십시오
- 데이터 형식 : JSON 해시 (또는 원하는 경우 XML)
- 트림 모드 : 트림 (사각형을 만듭니다)
- 픽셀 형식 : INDEXED 8 비트-8 비트 PNG 생성 (약 70 % 적은 메모리)
- 회전 허용 : false
- 데이터의 파일 이름을 입력하십시오
그 결과 이제 스프라이트 시트와 JSON 설명 파일이라는 두 개의 파일을 얻게됩니다.
"house_anim_01.png":
{
"frame": {"x":351,"y":246,"w":110,"h":79},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":67,"y":8,"w":110,"h":79},
"sourceSize": {"w":400,"h":400},
"pivot": {"x":0.5,"y":0.5}
},
중요한 부분은 frame 과 spriteSourceSize 입니다.
프레임은 당신에게 스프라이트 시트의 원래 스프라이트의 위치를 제공합니다.
spriteSourceSize 는 이미지를 그리는 데 필요한 오프셋 (자르기 때문에 남은 이미지 부분)을 제공합니다.
간단한 의사 코드 그리기 루틴은 다음과 같습니다.
drawImage(spritename, posX, posX)
{
data = sheetData[spritename]
offsetX = data.spriteSourceSize.x
offsetY = data.spriteSourceSize.y
frameX = data.frame.x
frameY = data.frame.y
width = data.frame.w
height = data.frame.h
screen.draw(sheetImage, posX+offsetX, posY+offsetY, width, height)
}
그래픽 시스템의 피벗 포인트 / 원점에 따라 오프셋 계산을 조정해야 할 수도 있습니다. 위의 루틴은 원점이 왼쪽 상단 인 좌표계를 가정합니다.
그런 다음 간단히 2 패스로 집을 그립니다.
draw("background", 100, 100);
draw("anim_01", 100, 100);
이미지가 이미 정렬되었으므로 오프셋에 신경 쓸 필요가 없습니다.