TexturePacker'ı denemenizi öneririm
- tüm resimlerinizi sürükleyip bırakabilir ve paketleyebilirsiniz
- farklı sıkıştırma uygulayabilirsiniz (örneğin, daha az bellek tüketen dizine alınmış PNG'ler kullanın - standart bir PNG dosyasına kıyasla% 70'e kadar daha az)
- binalarınızın her birinin adını + konumunu içeren bir dosya veri dosyaları oluşturabilirsiniz
- ücretsiz sürüm sizin için sprite sayfalarını oluşturmak için zaten yeterli olabilir
AndEngine, Cocos2d-x veya LibGdx gibi bir oyun geliştirme çerçevesi kullanıyor musunuz? => Yok
Tüm resimlerinizin aynı anda yüklenmesine mi ihtiyacınız var? Hedef cihazlarda büyük RAM sorunlarıyla karşılaşacağınız anlaşılıyor.
Güncelleme: Snake bana bazı görüntüler gönderdi. Söz verildiği gibi onları burada halka açmayacak, bu yüzden bellek kullanımını nasıl azaltacağımı göstermek için kendim bir sanat yarattım.
Orijinal görüntüde görüntünün yalnızca bir kısmı hareket ediyordu. Bunu göstermek için bir eve bir kuş yerleştirdim:
Temel olarak tüm animasyonu bir kağıda paketlemek büyük bir hafıza kaybıdır. Statik ve hareketli parçaları bölmelisiniz:
Statik:
Anim01:
Anim02:
Görüntülerdeki kuşun orijinal konumunu koruyun . Bu yüzden yukarıda mich boş alanı var. Animasyonu hizalamak için buna ihtiyacınız var.
Şimdi görüntüleri TexturePacker'a sürükleyin ve aşağıdaki parametreleri seçin
- Veri biçimi: JSON karması (veya isterseniz XML)
- TrimMode: Trim (bu dikdörtgenler oluşturur)
- Piksel biçimi: INDEXED 8bit - 8 bit PNG'ler oluşturmak için (yaklaşık% 70 daha az bellek)
- Döndürmeye İzin Ver: yanlış
- Veriler için bir dosya adı girin
Sonuçta artık 2 dosya elde edersiniz: hareketli grafik sayfası ve bir JSON açıklama dosyası.
"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}
},
Önemli parçalar frame ve spriteSourceSize'dir .
Çerçeve size sprite sayfasında orijinal sprite yerini verir.
spriteSourceSize görüntüyü çizmek için ofseti verir - görüntünün kırpma nedeniyle dışarıda bırakılan parçaları:
Basit bir sözde kod çizim rutini şuna benzer:
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)
}
Ofset hesaplamasını, grafik sisteminizdeki pivot noktasına / orijinine bağlı olarak ayarlamanız gerekebilir. Yukarıdaki rutin, menşei sol üstte olan bir koordinat sistemini varsayar.
Sonra evi 2 geçişte çizin:
draw("background", 100, 100);
draw("anim_01", 100, 100);
Ofsetleri önemsemeniz gerekmez - görüntüler zaten hizalanmış.