begin process at 2012 05 27 13:43:58
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Divers

 > AS3 - CHARGER UNE IMAGE EXTERNE, L'UTILISER PLUSIEURS FOIS (AVEC UNE SEULE REQUETE)

AS3 - CHARGER UNE IMAGE EXTERNE, L'UTILISER PLUSIEURS FOIS (AVEC UNE SEULE REQUETE)


 Information sur la source



 Description

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

  • 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;
  • }
  • }
  • }
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.g oogle.fr/images/srpr/logo2w.png"));


 Sources de la même categorie

Source avec Zip Source avec une capture PHP COUNTER EVOLUTION par top30
Source avec Zip DISTRIBUTION D'OBJETS par top30
Source avec Zip Source avec une capture MULTI-DEBRID par remy2501
Source avec Zip Source avec une capture MODE CONSOLE DE LINUX par tipharris
Source avec Zip Source avec une capture BREVET - POINT - MENTION par kekoune

 Sources en rapport avec celle ci

TRANSFERT DE DONNÉES FLASH <-> PHP - PETITE SUBTILITÉ AVEC J... par Loubiou
Source avec Zip Source avec une capture OUVRIR UNE ANIMATION EXTERNE DANS UN CLIP VIDE. par KcHeY
Source avec Zip Source avec une capture AS3 - PRINCIPE ET APPLICATION DE FONCTION RÉCURSIVE par pegase31
Source avec Zip REDIMENSIONNEMENT PROPORTIONNEL D'UNE IMAGE par Orange73
Source avec Zip CHARGER SON EXTERNE FLASH AS par tranber78

Commentaires et avis

Commentaire de aerolyte le 22/07/2011 01:38:09

Bonjour,

A prime abord, j'aurais dit pourquoi pas?
Mais en faite, son interet n'est pas si évident.

D'une part, tu ne gère pas les événements,(chargement,fin et erreurs), ce qui est comphénsible du fait de la complexité  de le coupler avec un return sur le loader. Du coup l'uasge de ta classe se reduit fortement.

D'autre part, je soupconne que dans une application un peu lourde si le garbage collector est actif, ton array "image" sera bon a etre effacé.

Enfin, je t'invite a découvrir le bibliothéques partagées. Pourquoi?
Tous simplement par ce qu'un élément que l'on retrouve de nombreuses fois dans une application, a tout interet a etre stocké dans une lib.(
Temps d'acces inexistant, et pour peu que tu face une bibiotheque qui se charge a l'execution, tu ne surchargeras pas ton swf principal.
Comme cela tu garde tes loaders pour des éléments individuels, vue le temps qu prend une requete url.

Cordialement

Commentaire de pegase31 le 22/07/2011 07:11:54 administrateur CS

Je suis assez d'accord avec Aerolyte, si ce n'est sur les bibliothèques partagées (qui arrangent bien, mais ne résolvent pas tout, car il faut tout charger d'un coup avant d'utiliser)

Déjà je te conseillerais d'aller voir les fonctions avancées de type Array.some() et Array.every() qui remplaceraient ta fonction "loadedState".

Ensuite, il aurait été plus propre de ne renvoyer que le BitmapData au lieu du Loader complet. Ce dernier étant un objet qui contient un autre objet et donc une encapsulation plutôt inutile.
Le seul soucis est que, par défaut, une classe statique ne peut pas déclencher d'évènement et il est donc impossible de savoir quand ton fichier est fini de charger.

Il existe une méthode permettant de faire cela avec quelques lignes. Va voir là : http://upshots.org/?p=41

Mais il est plus simple de charger une image de type TileSet et d'en découper les morceaux (Tile) à l'aide d'une classe statique renvoyant un BitmapData. Celà évite les chargements multiples et permet d'avoir autant de Tile que désirés.

Peg'

Commentaire de SuperChouquette le 22/07/2011 11:58:37

En fait je souhaitais que mon jeux commence même si toutes les images n'étaient pas chargés, un peux comme sur un navigateur web ou la page commence à s'afficher même si tous les éléments ne sont pas chargés. Je ne souhaitait pas non plus précharger toutes les images, mais juste les charger quand j'en avais besoin pareil pour pouvoir commencer à jouer rapidement.

C'est vrai que ce code ne convient pas pour une galerie photos (ou il faut mettre une barre de chargement, gestion des erreurs, etc..), mais je ne trouvais pas ça très embêtant qu'il n'y ai pas de barre de chargement et de gestion des erreurs pour chaque image (comme sur un navigateur web en fait).

Je suis débutant et je ne connaissais pas les bibliothèques partagées, merci de m'en avoir parlé, je vais de ce pas regarder ! =D

Commentaire de aerolyte le 22/07/2011 12:11:17

Bonjour,
Peg',l'intêret d'une runtime shared librairy (bibliotheque partagée à l'execution), utilisant une paire swf/swc est justement de ne pas avoir a charger tout le swf d'un coup, mais uniquement les classes que 'on souhaite au moment ou l'on veut.

Resumé:

Partagée : Utilisation illimité d'une classe.
A l'éxecution: la lib n'est pas compilée, dans le fla principal, du coup elle ne l'allourdi pas
Couple swf/swc: permet de ne pas chargée toute la lib mais uniquement les éléments voulus.
(Le swc, contient un xml qui index les classes présentes dans le swf.)

Cordialement

Commentaire de top30 le 19/08/2011 14:06:39


Son idée est sympa et facile à réaliser...
Il a voulu faire vite et oublier des trucs important, comme lees URL non valides, que se passe t-il si tu charges 10 images de la mème URL dans un block...

Donc j'ai reprise le principe pour moi ici:
http://www.flashkod.com/codes/CLASS-IMAGE-IMAGEEVENT_53484.aspx.
Comme perso je suis pas partisant des bibliothèquepartagée puis l'as3...

A plus...

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

charger un jpg [ par tallgeese ] Hello!Voilà j'ai un diaporama qui charge les jpg du dossier de mon anime.Ces diapo. défile tout seul en chargent image apres image dy type:i = i+1;loa image exterieur charger par ouvertur de fichier [ par kodiask ] je voudrai savoir coment faire pour charger une image dans un .swf l'image sera choisi par lutilisateur du .swfmeric bcp Integrer du PNG [ par zephilde ] Boujour tt le monde!J'ai besoin de charger dynamiquement des icones (donc *.ico) mais comme c'est impossible je me suis résolu a charger des images PN charger un clip a partir d'une certaine image [ par maitreyoda84 ] Bonjour je suis un débutant en flash et ma question va peut etre vous faire rire ...Est-il possible avec l'instruction loadmovie (ou une autre) de cha charger une image en rapport avec le nom du bouton [ par PhilBur ] Bonjour, voila comment puis-je charger une image en fonction du nom du bouton...j'ai essayer avec this._name...mais il ne me retourne rien voila le centrage image [ par gwygwy ] Aucun problème. Mais les images que je charge sont de formats différents. Certaines ont été prisent au format paysage et d'autres au format portrait. clip externe a une image precise [ par tatya ] hello. J'aimerai charger un clip externe, mais pas du debut. A partir d'une etiquette. Comment faire ?Sinon, c'est parce ke j'ai charger une video en charger une image sur le disque [ par Daphne_d ] Bonjour, j'ai cr&#233;&#233; une galerie photo dans flash pour un CD ROM, et je souhaite avoir un lien qui permette &#224; l'utilisateur de t&#233;l&# Charger une image au hazard [ par twinsen60 ] BonjourVoil&#224;, je cr&#233;er un site internet (pas encore en ligne), par le biais de Flash Mx.Il fonctionne tr&#232;s bien, mais j'aimerai que sur Charger une image GIF [ par Typhlosion ] Bonjour,D&#233;sol&#233;, je suis nouveau, et je d&#233;bute en Flash.Il est tr&#232;s probable que cette question soit totalement stupide, je peux l'


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,608 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales