Jetez un coup d'œil à cette impressionnante article .
J'ai fait quelques changements pour qu'il renvoie un sprite, au lieu d'en être un.
Vous pouvez en savoir plus dans l'article, mais cette classe récupère essentiellement les données bitmap de l'actif, et les met en cache dans un objet. Chaque fois que vous avez besoin d'une autre instance de cet actif, vous obtenez les données bitmap mises en cache. Vous pouvez améliorer beaucoup plus, en utilisant cette technique, en définissant les paramètres suivants qualité de la scène à faible .
Cette technique est meilleure que la simple utilisation de cacheAsBitmap car vous pouvez utiliser un Sprite, au lieu d'un bitmap plat, tout en ayant les données bitmap mises en cache.
public class CachedSpriteFactory
{
//Declare a static data cache
protected static var cachedData:Object = {};
public static var clip:Bitmap;
public function cacheSprite(asset:Object, scale:int = 2):Sprite
{
//Check the cache to see if we've already cached this asset
var data:BitmapData = cachedData[getQualifiedClassName(asset)];
if (!data)
{
var instance:Sprite = new asset();
var bounds:Rectangle = instance.getBounds(this);
//Optionally, use a matrix to up-scale the vector asset, this way you can increase scale later and it still looks good.
var m:Matrix = new Matrix();
m.translate(-bounds.x, -bounds.y);
m.scale(scale, scale);
data = new BitmapData(bounds.width * scale, bounds.height * scale, true, 0x0);
data.draw(instance, m, null, null, null, true);
cachedData[getQualifiedClassName(asset)] = data;
}
clip = new Bitmap(data, "auto", true);
//Use the bitmap class to inversely scale, so the asset still appear to be it's normal size
clip.scaleX = clip.scaleY = 1/scale;
var sprite:Sprite = new Sprite();
sprite.addChild(clip);
//Optimize mouse children
sprite.mouseChildren = false;
return sprite;
}
}
Utilisation :
stage.quality = StageQuality.HIGH
var cacheFactory:CachedSpriteFactory = new CachedSpriteFactory();
var coolSprite1:Sprite = cacheFactory.cacheSprite(SpriteLinkageNameInLibrary, 1);
var coolSprite2:Sprite = cacheFactory.cacheSprite(SpriteLinkageNameInLibrary, 1);
stage.quality = StageQuality.LOW