spine导出资源图集过多,不想全部加载,只想加载当前使用的图集,减少内存消耗。
实现流程和spine使用外部图片换装差不多
1、使用占位图片(比如10*10像素的透明图)替换spine默认图集
2、在setSkin和setAttachment的时候根据attachment.region.page.name找到对应的图集名字
3、加载对应的图集资源
4、替换attachment的texture,并重新计算uv。参考代码如下
setAttachmentAtlasTexture(attachment, atlasTexture) {
if (attachment && attachment.region && atlasTexture) {
let region = attachment.region
region.page.texture.setRealTexture(atlasTexture)
region.page.width = atlasTexture.width
region.page.texture._image.width = atlasTexture.width
region.page.height = atlasTexture.height
region.page.texture._image.height = atlasTexture.height
let isMesh = attachment instanceof sp.spine.MeshAttachment
let isRegion = attachment instanceof sp.spine.RegionAttachment
region.u = region.x / atlasTexture.width
region.v = region.y / atlasTexture.height
if (region.rotate) {
region.u2 = (region.x + region.height) / atlasTexture.width;
region.v2 = (region.y + region.width) / atlasTexture.height;
}
else {
region.u2 = (region.x + region.width) / atlasTexture.width;
region.v2 = (region.y + region.height) / atlasTexture.height;
}
if (isMesh) {
attachment.updateUVs()
}
if (isRegion) {
attachment.setRegion(region)
attachment.updateOffset()
}
}
},