Forums Développement Multimédia

Aller au contenu

[Résolu] Affecter dimension d'une image chargée à son clip ✔

clip dimension image CODE Actionscript

8 réponses à ce sujet

#1 shackdown

    Ceinture Blanche

  • Members
  • Pip
  • 5 messages

Posté 23 February 2012 - 13:13 PM

Bonjour,
Je vous explique ma volonté , j'aimerais charger une image dans un clip . Le chargement de l'image dans le clip est fonctionnel , cependant mon clip a des dimensions nulles c'est à dire que si je fais

trace(clip.width);
 
J'obtiens 0 dans le sortie de flash cs5.5

J'aimerais pouvoir affecter à clip.width et clip.height les dimensions de l'image chargée pour pouvoir l'animer (le clip) par la suite .
Voila mon code (des indications dans les commentaires)





import flash.display.Loader;
import flash.events.Event;
import flash.net.URLRequest;
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.display.MovieClip;



var _chargeur:Loader = new Loader();
var clip:MovieClip = new MovieClip();

function chargeurImage(fichier){
_chargeur.contentLoaderInfo.addEventListener(Event.COMPLETE, onComplete);
_chargeur.load(new URLRequest(fichier));
}

function onComplete(evt:Event){
var image:Bitmap = Bitmap(_chargeur.content);
var bitmap:BitmapData = image.bitmapData;
//clip.addChild(evt.currentTarget.content);
clip.addChild(image);
clip.width=image.width;
clip.height=image.height;
// si je fais trace(clip.height); ici , ça fonctionne j'obtiens bien la dimension de l'image chargée
}

chargeurImage("rouge.gif");
addChild(clip);
// si je fais trace(clip.height); ici , ça fonctionne pas j'obtiens 0


 

En espérant avoir été assez clair , merci par avance de votre aide :)

#2 Monsieur Spi

  • Community Manager
  • PipPipPipPipPipPipPipPip
  • 7010 messages

Posté 23 February 2012 - 14:42 PM

Salut,

Ton problème viens du fait que tu tente de récupérer les dimensions du conteneur alors que l'image n'est pas encore chargée dedans.

Autrement dit quand tu fais :

addChild(clip);

Tu ajoute le conteneur à la liste d'affichage mais il n'est pas encore rempli avec l'image.
En gros ton code marche, mais tu récupére la taille du conteneur au mauvais moment, il faut attendre que l'image soit chargée dedans avant de lui demander ses dimensions.

#3 shackdown

    Ceinture Blanche

  • Members
  • Pip
  • 5 messages

Posté 23 February 2012 - 14:50 PM

Merci Monsieur Spi pour ta réponse, bon déjà ça fixe mon premier problème.
J'aimerais pouvoir accéder a clip.height en dehors de la fonction onComplete , car une fois l'image chargé, son clip créé , j'aimerais l'animer par programmation.
Ca doit être un problème de chargement de l'image , non ?

#4 Monsieur Spi

  • Community Manager
  • PipPipPipPipPipPipPipPip
  • 7010 messages

Posté 23 February 2012 - 14:53 PM

Re,

Je ne comprend pas ton problème.
Une fois l'image chargée dans le conteneur, le conteneur à la taille de l'image chargée.

Citation

J'aimerais pouvoir accéder a clip.height en dehors de la fonction onComplete , car une fois l'image chargé, son clip créé , j'aimerais l'animer par programmation.

Si tu fais les choses dans l'ordre, tu charge d'abord l'image dans le conteneur, puis, plus tard tu cherches à utiliser la taille du conteneur, qui, puisqu'on lui a chargé une image, a la taille de l'image qu'il contient. Donc tu ne devrais pas avoir de problème à accéder à clip.height en dehors de la fonction onComplete à partir du moment où tu le fait APRES la fonction onComplete (donc après que l'image soit chargée dedans).

Ou alors j'ai raté un truc.

#5 shackdown

    Ceinture Blanche

  • Members
  • Pip
  • 5 messages

Posté 23 February 2012 - 14:56 PM

Oui c'est bien ça .
si je fais par exemple :

function onComplete(evt:Event)
{
var image:Bitmap = Bitmap(_chargeur.content);
var bitmap:BitmapData = image.bitmapData;
clip.addChild(image);
clip.width = image.width;
clip.height = image.height;
addChild(clip);
}

chargeurImage("rouge.gif");

//notez le trace après la fonction onComplete et le chargement de l'image (j'ai mis que le code utile)
trace(clip.height);
 
Dans ce cas là j'ai 0 dans la sortie de flash , alors que mon image à une largeur de 200px.

#6 Monsieur Spi

  • Community Manager
  • PipPipPipPipPipPipPipPip
  • 7010 messages

Posté 23 February 2012 - 15:00 PM

Je vais me répéter mais ......


Le code que tu donne effectue un :

trace(clip.height);

AVANT que ta fonction onComplete ait fait son office.

Ce n'est pas parce que tu met le trace à la suite de la fonction onComplete que le code est lu dans ce sens.
La fonction onComplete n'est lancée que quand l'image est chargée, d'où son nom "On Complete" (quand l'événement est accompli), du coup ton trace est lu AVANT que le conteneur ne soit remplis, tant que l'image n'est pas chargée Flash ignore la fonction onComplete et lis le reste, donc ton trace.

Commence par t'assurer que tes conteneurs sont bien remplis et ensuite seulement tu peux faire des traces sur leur taille.

#7 shackdown

    Ceinture Blanche

  • Members
  • Pip
  • 5 messages

Posté 23 February 2012 - 15:04 PM

Ok c'est bien ce que je pensais (désolé pour la répétition) , donc dans l'idéal il faut un eventListener sur le clip "clip" est des qu'il est remplis , là je peux appeler ce que je veux. c'est bien ça ?
Ou je dois continuer l'execution de mon programme dans la procedure onComplete()

#8 Monsieur Spi

  • Community Manager
  • PipPipPipPipPipPipPipPip
  • 7010 messages

Posté 23 February 2012 - 15:08 PM

Pour te donner une piste, crée une grosse fonction "initialisation" qui sert à charger tous les conteneurs avec leurs images.
Puis à la fin de la fonction "initialisation" fait un appel à une fonction "main" que tu crée un peu plus loin et dans laquelle tu met tes traces pour récupérer la taille des conteneurs et ça va marcher.

Donc, une fonction "initialisation" qui sert à préparer tous les éléments utiles
Et une fonction "main" qui s'exécute à la fin de la fonction "initialisation" et qui te permet de lancer tout ce qui est utile dans ton application/animation. Ainsi tu respecte bien l'ordre des choses.


Ca donnerait un truc du genre :


function initialisation(){
            // je charge tout ce qui est utile
           main(); // a la fin je lance la fonction "main"
}

function main(){
// je récupére les dimensions de mes clip et je les animes
}
 


#9 shackdown

    Ceinture Blanche

  • Members
  • Pip
  • 5 messages

Posté 23 February 2012 - 15:11 PM

Merci beaucoup Monsieur Spi , je suis à présent claire sur l’exécution de l'actionscript.



1 utilisateur(s) li(sen)t ce sujet

0 membre(s), 1 invité(s), 0 utilisateur(s) anonyme(s)

authorised training centre

Centre de Formation Mediabox - Adobe et Apple Authorised Training Center.

Déclaré auprès de la Direction du Travail et de la Formation Professionnelle

Mediabox : SARL au capital de 62.000€ - Numéro d'activité : 11 75 44555 75 - SIRET : 49371646800035

MEDIABOX, 23, rue de Bruxelles, 75009 PARIS

FFP