Can you show a screenshot of the Metrics view for one of your typical skeleton attachment configurations?
There are two main ways to improve performace: 1) do less (fewer bones, fewer vertices, fewer timelines, etc), or 2) do it more efficiently (use a texture atlas, modify the runtime, etc). The runtime is already optimized for general usage, but you may be able to improve performance for your particular application (eg, remove code for features you don't use). If you look in spine-corona/spine.lua
you'll see:
if not image then
---
Create new image.
image = self:createImage(attachment)
...
When images change createImage
is called. By default this uses display.newImage
, which is probably slow (I'm only guessing here). You can provide your own createImage
implementation, eg to cache image instances rather than create them each time. The change most likely to improve your performance is to use a texture atlas. To do that you'd have createImage
return an image from your atlas. Unfortunately using an atlas with Corona is not easy. They provide graphics.newImageSheet
, but this was designed for a spritesheet grid, not a proper texture atlas.
Unfortunately Corona itself just does not have stellar performance. As with anything regarding performance, this doesn't matter unless it impacts the player. The problem with Corona is that it provides only high level APIs, limiting what can be done to improve performance. You are very likely to have better luck with other game toolkits (I recommend libgdx, which Spine uses), though I understand that may not be a simple change. Corona's limited APIs also prevents rendering Spine meshes at all and prevent using non-uniform bone scale.
Some discussion about Corona atlases here:
Corona SDK - Atlas?