Error: packing sprite failed
paulocoutinhox opened this issue · 9 comments
Hi,
Im starting get this error:
spright -p out
packing sprite failed (65x) in line 13
Can you help me?
Appear be an error here:
Line 265 in 7f2a70e
Hi, this message means that the sprites did not fit on the sheet.
Does your configuration still look like this?
max-width 1024
max-height 1024
output "tank-texture.png"
You could either increase the max-width
or max-height
or pack the sprites on multiple textures by providing a sequence instead of a single filename like: output "tank-texture{0-}.png"
.
Thanks for reporting, I will make the message more helpful.
Hi, what solve was output "tank-texture{0-}.png"
, perfect. Thanks again.
Hi,
Reopening this, because when i set for multiple textures, the plist don't load the textures and don't make the rect in correct PNG file, since now i have some:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>metadata</key>
<dict>
<key>format</key>
<integer>3</integer>
<key>textureFileName</key>
<string>effect-texture0.png</string>
<key>size</key>
<string>{ 1024, 1024 }</string>
</dict>
<key>frames</key>
<dict>
<key>bubble</key>
<dict>
<key>spriteOffset</key>
<string>{ 1, 1 }</string>
<key>spriteSize</key>
<string>{ 126, 126 }</string>
<key>spriteSourceSize</key>
<string>{ 126, 126 }</string>
<key>textureRect</key>
<string>{ { 131, 890 }, { 126, 126 } }</string>
<key>textureRotated</key>
<false/>
<key>aliases</key>
<array/>
</dict>
<key>explosion_1_1</key>
<dict>
<key>spriteOffset</key>
<string>{ 0, 0 }</string>
<key>spriteSize</key>
<string>{ 60, 60 }</string>
<key>spriteSourceSize</key>
<string>{ 60, 60 }</string>
<key>textureRect</key>
<string>{ { 758, 890 }, { 60, 60 } }</string>
<key>textureRotated</key>
<false/>
<key>aliases</key>
<array/>
</dict>
<key>explosion_1_2</key>
<dict>
<key>spriteOffset</key>
<string>{ 0, 0 }</string>
<key>spriteSize</key>
<string>{ 57, 56 }</string>
<key>spriteSourceSize</key>
<string>{ 57, 56 }</string>
<key>textureRect</key>
<string>{ { 879, 890 }, { 57, 56 } }</string>
<key>textureRotated</key>
<false/>
<key>aliases</key>
<array/>
</dict>
<key>explosion_1_3</key>
<dict>
<key>spriteOffset</key>
<string>{ 0, 0 }</string>
<key>spriteSize</key>
<string>{ 64, 63 }</string>
<key>spriteSourceSize</key>
<string>{ 64, 63 }</string>
<key>textureRect</key>
<string>{ { 565, 890 }, { 64, 63 } }</string>
<key>textureRotated</key>
<false/>
<key>aliases</key>
<array/>
</dict>
<key>explosion_1_4</key>
<dict>
<key>spriteOffset</key>
<string>{ 0, 0 }</string>
<key>spriteSize</key>
<string>{ 46, 45 }</string>
<key>spriteSourceSize</key>
<string>{ 46, 45 }</string>
<key>textureRect</key>
<string>{ { 696, 952 }, { 46, 45 } }</string>
<key>textureRotated</key>
<false/>
<key>aliases</key>
<array/>
</dict>
<key>explosion_1_5</key>
<dict>
<key>spriteOffset</key>
<string>{ 0, 0 }</string>
<key>spriteSize</key>
<string>{ 53, 52 }</string>
<key>spriteSourceSize</key>
<string>{ 53, 52 }</string>
<key>textureRect</key>
<string>{ { 938, 890 }, { 53, 52 } }</string>
<key>textureRotated</key>
<false/>
<key>aliases</key>
<array/>
</dict>
<key>explosion_2_1</key>
<dict>
<key>spriteOffset</key>
<string>{ 0, 0 }</string>
<key>spriteSize</key>
<string>{ 41, 49 }</string>
<key>spriteSourceSize</key>
<string>{ 41, 49 }</string>
<key>textureRect</key>
<string>{ { 820, 948 }, { 41, 49 } }</string>
<key>textureRotated</key>
<false/>
<key>aliases</key>
<array/>
</dict>
<key>explosion_2_2</key>
<dict>
<key>spriteOffset</key>
<string>{ 0, 0 }</string>
<key>spriteSize</key>
<string>{ 75, 77 }</string>
<key>spriteSourceSize</key>
<string>{ 75, 77 }</string>
<key>textureRect</key>
<string>{ { 488, 890 }, { 75, 77 } }</string>
<key>textureRotated</key>
<false/>
<key>aliases</key>
<array/>
</dict>
<key>explosion_2_3</key>
<dict>
<key>spriteOffset</key>
<string>{ 0, 0 }</string>
<key>spriteSize</key>
<string>{ 127, 127 }</string>
<key>spriteSourceSize</key>
<string>{ 127, 127 }</string>
<key>textureRect</key>
<string>{ { 2, 890 }, { 127, 127 } }</string>
<key>textureRotated</key>
<false/>
<key>aliases</key>
<array/>
</dict>
<key>explosion_crash_1_18</key>
<dict>
<key>spriteOffset</key>
<string>{ 16, 3 }</string>
<key>spriteSize</key>
<string>{ 494, 442 }</string>
<key>spriteSourceSize</key>
<string>{ 494, 442 }</string>
<key>textureRect</key>
<string>{ { 2, 2 }, { 494, 442 } }</string>
<key>textureRotated</key>
<false/>
<key>aliases</key>
<array/>
</dict>
<key>explosion_crash_1_19</key>
<dict>
<key>spriteOffset</key>
<string>{ 16, 3 }</string>
<key>spriteSize</key>
<string>{ 494, 442 }</string>
<key>spriteSourceSize</key>
<string>{ 494, 442 }</string>
<key>textureRect</key>
<string>{ { 498, 446 }, { 494, 442 } }</string>
<key>textureRotated</key>
<false/>
<key>aliases</key>
<array/>
</dict>
<key>explosion_crash_1_20</key>
<dict>
<key>spriteOffset</key>
<string>{ 16, 3 }</string>
<key>spriteSize</key>
<string>{ 494, 442 }</string>
<key>spriteSourceSize</key>
<string>{ 494, 442 }</string>
<key>textureRect</key>
<string>{ { 2, 446 }, { 494, 442 } }</string>
<key>textureRotated</key>
<false/>
<key>aliases</key>
<array/>
</dict>
<key>explosion_crash_1_20</key>
<dict>
<key>spriteOffset</key>
<string>{ 16, 3 }</string>
<key>spriteSize</key>
<string>{ 494, 442 }</string>
<key>spriteSourceSize</key>
<string>{ 494, 442 }</string>
<key>textureRect</key>
<string>{ { 498, 2 }, { 494, 442 } }</string>
<key>textureRotated</key>
<false/>
<key>aliases</key>
<array/>
</dict>
<key>explosion_smoke_1_1</key>
<dict>
<key>spriteOffset</key>
<string>{ 0, 0 }</string>
<key>spriteSize</key>
<string>{ 60, 60 }</string>
<key>spriteSourceSize</key>
<string>{ 60, 60 }</string>
<key>textureRect</key>
<string>{ { 696, 890 }, { 60, 60 } }</string>
<key>textureRotated</key>
<false/>
<key>aliases</key>
<array/>
</dict>
<key>explosion_smoke_1_2</key>
<dict>
<key>spriteOffset</key>
<string>{ 0, 0 }</string>
<key>spriteSize</key>
<string>{ 57, 56 }</string>
<key>spriteSourceSize</key>
<string>{ 57, 56 }</string>
<key>textureRect</key>
<string>{ { 820, 890 }, { 57, 56 } }</string>
<key>textureRotated</key>
<false/>
<key>aliases</key>
<array/>
</dict>
<key>explosion_smoke_1_3</key>
<dict>
<key>spriteOffset</key>
<string>{ 0, 0 }</string>
<key>spriteSize</key>
<string>{ 63, 63 }</string>
<key>spriteSourceSize</key>
<string>{ 63, 63 }</string>
<key>textureRect</key>
<string>{ { 631, 890 }, { 63, 63 } }</string>
<key>textureRotated</key>
<false/>
<key>aliases</key>
<array/>
</dict>
<key>explosion_smoke_1_4</key>
<dict>
<key>spriteOffset</key>
<string>{ 0, 0 }</string>
<key>spriteSize</key>
<string>{ 46, 45 }</string>
<key>spriteSourceSize</key>
<string>{ 46, 45 }</string>
<key>textureRect</key>
<string>{ { 863, 948 }, { 46, 45 } }</string>
<key>textureRotated</key>
<false/>
<key>aliases</key>
<array/>
</dict>
<key>explosion_smoke_1_5</key>
<dict>
<key>spriteOffset</key>
<string>{ 0, 0 }</string>
<key>spriteSize</key>
<string>{ 53, 52 }</string>
<key>spriteSourceSize</key>
<string>{ 53, 52 }</string>
<key>textureRect</key>
<string>{ { 938, 944 }, { 53, 52 } }</string>
<key>textureRotated</key>
<false/>
<key>aliases</key>
<array/>
</dict>
<key>smoke_puff_1_1</key>
<dict>
<key>spriteOffset</key>
<string>{ 0, 0 }</string>
<key>spriteSize</key>
<string>{ 98, 90 }</string>
<key>spriteSourceSize</key>
<string>{ 98, 90 }</string>
<key>textureRect</key>
<string>{ { 388, 890 }, { 98, 90 } }</string>
<key>textureRotated</key>
<false/>
<key>aliases</key>
<array/>
</dict>
<key>smoke_puff_1_2</key>
<dict>
<key>spriteOffset</key>
<string>{ 0, 0 }</string>
<key>spriteSize</key>
<string>{ 127, 120 }</string>
<key>spriteSourceSize</key>
<string>{ 127, 120 }</string>
<key>textureRect</key>
<string>{ { 259, 890 }, { 127, 120 } }</string>
<key>textureRotated</key>
<false/>
<key>aliases</key>
<array/>
</dict>
</dict>
<key>aliases</key>
<array/>
</dict>
</plist>
My template:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>{% set texture=first(textures) %}
<key>metadata</key>
<dict>
<key>format</key>
<integer>3</integer>
<key>textureFileName</key>
<string>{{ texture.filename }}</string>
<key>size</key>
<string>{ {{ texture.width }}, {{ texture.height }} }</string>
</dict>
<key>frames</key>
<dict>
## for index in texture.spriteIndices
{% set sprite=at(sprites, index) %}<key>{{ sprite.id }}</key>
<dict>
<key>spriteOffset</key>
<string>{ {{sprite.trimmedSourceRect.x}}, {{sprite.trimmedSourceRect.y}} }</string>
<key>spriteSize</key>
<string>{ {{sprite.trimmedRect.w}}, {{sprite.trimmedRect.h}} }</string>
<key>spriteSourceSize</key>
<string>{ {{sprite.trimmedSourceRect.w}}, {{sprite.trimmedSourceRect.h}} }</string>
<key>textureRect</key>
<string>{ { {{sprite.trimmedRect.x}}, {{sprite.trimmedRect.y}} }, { {{sprite.trimmedRect.w}}, {{sprite.trimmedRect.h}} } }</string>
<key>textureRotated</key>
<{{ sprite.rotated }}/>
<key>aliases</key>
<array/>
</dict>
## endfor
</dict>
<key>aliases</key>
<array/>
</dict>
</plist>
Do .plists support more than one texture?
I just tried to pack some sprites using https://free-tex-packer.com/app/ and reduced the width/height so it had to arrange them on multiple textures. When exporting it to cocos2d it created a .zip contianing one .plist file per texture.
Is that what you were expecting? This strategy is unfortunately not available yet in spright.
This is a good question, and it don't have support.
I think that the best option will be multiple .plist
, as you sad and work from free-tex-packer.
Hi,
outputting multiple .plist files at once is available in version 3.5.1.
The only thing you have to do is to provide a sequence in description
like:
description "out/tank-texture-{0-}.plist"
Then one .plist file is written per slice.
Thanks, it works.