As3 - charger une image externe, l'utiliser plusieurs fois (avec une seule requete)

Contenu du snippet

Cette classe permet de charger une image externe et de l'utiliser plusieurs fois en ne générant qu'une seule requête.
L'image sera chargée uniquement au moment ou vous l'utiliserez (pas de préchargement au début de toutes les images).
Si elle à déjà été chargée elle est affichée sans faire de nouvelles requêtes sinon elle est chargée puis affichée.

Je l'ai utilisé pour faire un petit jeux en 3D isométrique, de nombreuses images étaient souvent utilisées plusieurs fois, je ne souhaitait pas faire 500 requêtes pour la même image, certaines images ne me servaient pas toujours, je n'ai donc pas fait de préchargement de toutes les images, et j'ai donc créé cette classe.

Je suis débutant en AS3, soyez indulgents c'est ma première source en AS3 ;D

Source / Exemple :


package {
	import flash.display.Loader;
	import flash.net.URLRequest;

	public class Image {
		
		private static var images:Array = new Array();

		public static function getImage(image:String):Loader {
			var index:int;
			var state:int;

			// On regarde l'état de chargement de l'image
			// Retourne -1 si l'image n'est pas chargée, renvoi l'index si l'image a été trouvée
			index = loadedState(image);
			
			// Si l'image n'est pas chargée
			if (index == -1) {
				var loader:Loader = new Loader();
				loader.load(new URLRequest(image));
				images[images.length] = new Array(image, loader);
				return loader;
			}
			
			// Si l'image est déjà chargée
			else {
				return images[index][1];
			}
		}
		
		private static function loadedState(image:String) {
			var i:int;
			var index:int = -1;
			// image[i][0] stocke le nom de l'image, et image[i][1] stocke le loader
			for (i = 0; i < images.length; i++) {
				if (images[i][0] == image) { index = i; break; }
			}
			
			return index;
		}
		
	}
}

Conclusion :


Pour utiliser cette classe, il suffit de l'importer puis par exemple pour ajouter une image sur le stage:
stage.addChild(Image.getImage("http://www.google.fr/images/srpr/logo2w.png"));

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.