La fonctionnalité dont nous allons parler ici est très certainement dans le top 5 des fonctionnalités les plus recherchées, nous allons donc décrire le code permettant de gérer ce chargement en AS1/AS2 ainsi qu’en AS3.
Charger une image bitmap
Petit historique : Depuis Flash MX le chargement d’image est possible, à l’époque, en 1978 l’année de la consécration des « Bee Gees » avec « Stayin’ Alive » et oui ça remonte à loin tout ça, nous ne pouvions charger que du jpeg non-progressif. Aujourd’hui la majeur partie des formats d’image sont pris en charge. Cependant Flash évolue dans un contexte on-line et même si les débits ont largement augmenté, il est de bon ton de compresser (en mode RVB) au préalable via Photoshop ou tout autre logiciel de retouche, les images que vous allez charger dynamiquement.
-
En ActionScript 1 et 2 – niveau débutant :
-
En ActionScript 3 – niveau avancé :
Pour charger une image JPEG, on utilise la méthode de MovieClip loadMovie(), exactement de la même manière que lorsqu’on désire charger un swf externe.
Dans notre exemple, nous allons charger une photo au format JPEG dans notre animation, au lancement de celle-ci, c’est-à-dire sur sa première image.
Afin de pouvoir la manipuler comme s’il s’agissait d’un clip d’animation, nous allons la charger dans un clip vide. Cette manière de procéder est courante, elle va nous permettre d’utiliser une méthode introduite depuis Flash MX(1978). celle-ci permet la création dynamique de clips d’animation, par programmation: createEmptyMovieClip().
1 2 3 | // Création d'un clip vide nommé "conteneur", // à la profondeur 1, sur _root: _root.createEmptyMovieClip("conteneur",1); |
Maintenant que nous avons créé un clip vide, nous pouvons charger notre photo dans celui-ci:
1 2 | // Chargement d'une photo dans le nouveau clip "conteneur": conteneur.loadMovie("photo.jpg"); |
Et voilà! Nous venons de charger dynamiquement une image dans un clip, auquel vous pouvez appliquer toutes les transformations applicables à n’importe quel clip.
Attention, comme lorsque l’on charge des animations au format SWF, pour cibler une image bitmap chargée dynamiquement, vous utiliserez comme chemin de ciblage le nom du clip dans lequel le fichier a été chargé, et non pas le nom du fichier.
Ainsi, par exemple, pour redimensionner la photo précédemment chargée, on écrira:
1 2 | conteneur._xscale /= 3; conteneur._yscale /= 3; |
ActionScript 3 élimine les nombreuses fonctions et méthodes existantes dans les précédentes versions d’ActionScript telle loadMovie et étend le concept de la classe MovieClipLoader introduite avec Flash MX 2004.
Afin de charger différents types de contenus tels des images ou des animations nous utilisons la classe flash.display.Loader. Celle-ci hérite de la classe DisplayObjectContainer et peut donc être ajoutée à la liste d’affichage. D’autres classes telles flash.net.URLLoader ou flash.net.URLStream peuvent être utilisées afin de charger tout type de contenu, mais leur utilisation s’avère plus complexe.
• La classe Loader permet le chargement de contenu graphique seulement.
• Celle-ci hérite de la classe DisplayObjectContainer et peut donc être ajoutée à la liste d’affichage.
• Il faut considérer la classe Loader comme un objet d’affichage.
La classe Loader permet de charger des images au format PNG, JPEG, JPEG progressif et GIF non animé. Des animations SWF peuvent aussi être chargées. Nous instancions tout d’abord la classe Loader :
Puis nous appelons la méthode load dont voici la signature :
1 | public function load(request:URLRequest, context:LoaderContext = null):void; |
- Celle-ci requiert deux paramètres dont voici le détail :
• request : un objet URLRequest contenant l’adresse de l’élément à charger.
• context : un objet LoaderContext définissant le contexte de l’élément chargé inutile dans cet exemple.
La classe URLRequest est utilisée pour toute connexion externe HTTP liée aux classes URLLoader, URLStream, Loader et FileReference.
Dans le code suivant, nous enveloppons l’URL à atteindre dans un objet URLRequest :
1 2 3 4 5 6 7 8 | // création du chargeur var chargeur:Loader = new Loader(); // url à atteindre var maRequete:URLRequest = new URLRequest ("bob.jpg"); // chargement du contenu chargeur.load ( maRequete ); |
L’utilisation d’un objet URLRequest diffère des précédentes versions d’ActionScript où une simple chaîne de caractères était passée aux différentes fonctions liées au chargement externe. Certaines classes ActionScript 3 telles Socket, URLStream, NetConnection et NetStream font néanmoins exception et ne nécessitent pas d’objet URLRequest.
Afin de rendre graphiquement le contenu chargé nous devons ajouter l’objet Loader à la liste d’affichage :
1 2 3 4 5 6 7 8 9 10 11 | // création du chargeur var chargeur:Loader = new Loader(); // url à atteindre var maRequete:URLRequest = new URLRequest ("bob.jpg"); // chargement du contenu chargeur.load ( maRequete ) // ajout à la liste d'affichage addChild ( chargeur ); //L’image est alors affichée |
Bonjour et bonne année 2010
Je suis formateur et j’utilise Flash.
Actuellement j’ai un problème, je souhaite créer des QCM avec Flash (AS3).
Votre code est marche très bien, mais comment faire pour avoir le même résultat en cliquant sur un bouton.
Merci
01 jan 2010 @ 18:53
Il faut utiliser le modèle événementiel. Il faut souscrire un écouteur (une fonction en l’occurrence) à l’événement CLICK diffusé par le bouton :
monBouton.addEventListener(MouseEvent.CLICK, chargerUneImage);
function chargerUneImage ( pEventArgs:MouseEvent ):void
{
//et là le code pour charger l’image soit
var maRequete:URLRequest = new URLRequest (« bob.jpg »);
// chargement du contenu
chargeur.load ( maRequete )
}
05 jan 2010 @ 18:17
Hello ! Je me demande comment charger cette vidéo ou image dans une zone définie de la scène ?? Merci d’avance
11 avr 2010 @ 12:11