Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > Flash/Flex > Flash
Flash Forum d'entraide sur la technologie Flash (Cours, FAQs, Sources)
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 19/09/2007, 12h13   #1
Membre régulier
 
Inscription : décembre 2006
Messages : 493
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 493
Points : 90
Points : 90
Par défaut A propos du tuto "Chargement dynamique de JPEG"

Bonjour, je viens de lire et essayer le tutoriel "Chargement dynamique de JPEG". Ca marche, mais avec la méthode du prototype pour le préchargement, quand je charge mon swf externe, le conteneur va prendre automatiquement la taille de mon fichier externe. Comment le forcer à charger le fichier, mais à la taille qui m'interesse, genre vignette ?

Voici mon code :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
MovieClip.prototype.charge_image = function(file) {
// On crée un clip vide conteneur
conteneur = this.createEmptyMovieClip("conteneur", 100);
// On charge l'image dans conteneur
conteneur.loadMovie(file);
this.onEnterFrame = function() {
var total = this.getBytesTotal() ; // taille de l'animation en byte
var lu = this.getBytesLoaded() ; // l'état courant de chargement d'animation en byte
var rapport = Math.round((lu)/(total)*100); // le pourcentage de chargement de l'imge
this.pourcentage.text = Math.round(rapport) + " %"; //Affiche le pourcentage dans un champs texte dynamique
if (rapport >= 1) {
//on supprime l'évènement onEnterFrame
delete this.onEnterFrame;
}
}
};
// on lance le protype
this.charge_image("interface.swf");
// On le dimensionne
conteneur.width = 50
conteneur.height = 60
Merci d'avance.
nicolas2603 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/09/2007, 12h42   #2
Membre émérite
 
Avatar de thecaptain
 
Étudiant
Inscription : décembre 2003
Messages : 916
Détails du profil
Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : décembre 2003
Messages : 916
Points : 898
Points : 898
Salut,

Est-tu en AS2 ? Si oui, utilise plutot MovieClipLoader, tu as l'événement onLoadInit pour resizer ton clip Il n'est pas possible de charger directement le swf à la bonne taille, il faut le resizer une fois chargé. Avec onLoadInit, tu peux le faire instantanément. Avec ton onEnterFrame, on verra un cours laps de temps l'image à la taille original avant de se resizer !

@++
__________________
API ScrollBar (AS2)
Masapi (Massive Loading API) (AS3)
Lost in AStorm
thecaptain est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/09/2007, 14h17   #3
Membre régulier
 
Inscription : décembre 2006
Messages : 493
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 493
Points : 90
Points : 90
Est-ce la méthode avec onLoadInit est plus propre ou meilleure que ça ?

Code :
1
2
3
4
5
6
7
8
// On crée un clip vide:
//this.createEmptyMovieClip("image01", 1);
 
// On charge le clip
//this.image01.loadMovie("http://www.fond-d-ecran.com/html/download-1152x864.php?file=http://www.fond-d-ecran.com/wallpapers/voyage/monde/monde-1.jpg");
 
// On réduit le clip 3 fois
//this.image01._xscale = this.image01._yscale /= 3;
Car comme ceci ça fonctionne bien, vu que le temps qu'il charge l'image d'exemple il passe à la suite du code ...
nicolas2603 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/09/2007, 17h22   #4
Membre actif
 
Inscription : avril 2007
Messages : 126
Détails du profil
Informations personnelles :
Âge : 36
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : avril 2007
Messages : 126
Points : 150
Points : 150
Je suis pas sûr que ça marche ton code. Il ne faut jamais oublier que tout le code d'une frame est exécuté d'un coup. Or quand tu lances le chargement, il faut un petit temps pour charger. Ainsi, quand tu appliques juste derrière ton changement d'échelle, l'image n'est pas encore chargée.

Il est probable qu'au moment où les données de l'image sont disponibles, cela remette les transformations que tu avais appliquées à 0.

Essaye, je ne suis pas sûr.

Mais en tout cas, c'est pour éviter ce genre de problème assez courant, et parfois difficile à debugger, que l'on asynchronise le chargement, comme le propose theCaptain. Ainsi, tu es certain d'appliquer tes effets sur ton image, et non pas sur un clip encore vide.

Familiarise-toi avec MovieClipLoader, c'est la solution la plus propre. De plus, tu pourras faire myLoadedImage._width et ._height et connaître sa taille exacte, et la resizer exactement en fonction.

Enfin, sur le web, en général, on essaye de limiter la taille des données transmises... la solution la plus simple n'est-elle pas de réduire l'image JPG elle-même?
David Buff est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/09/2007, 17h47   #5
Membre régulier
 
Inscription : décembre 2006
Messages : 493
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 493
Points : 90
Points : 90
C'est justement là le hic. Ma page va présenter des images (vignettes au départ), qui grandiront lorsque l'on cliquera dessus. Donc pour être en qualité 100% à ce moment là, je veux les ouvrir et les redimmensionner !! J'ai fait comme ça étant donné que je ne comprends rien au système de vignette-xml ...
Je vais voir ce que je peux faire avec MovieClipLoader, merci
nicolas2603 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/09/2007, 17h55   #6
Membre actif
 
Inscription : avril 2007
Messages : 126
Détails du profil
Informations personnelles :
Âge : 36
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : avril 2007
Messages : 126
Points : 150
Points : 150
Oui, c'est la meilleure solution.

Et puis en relisant ton code, je viens de voir que ta ligne:
if (rapport >= 1) {

devrait être:
if (rapport >= 100) {

puisque tu ne compte pas de 0 à 1 mais bien de 0 à 100... ce qui fait que ton onEnterFrame est supprimé dès le début.
David Buff est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/09/2007, 20h57   #7
Membre régulier
 
Inscription : décembre 2006
Messages : 493
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 493
Points : 90
Points : 90
Alors voilà. Je n'arrive pas à faire fonctionner le code qui suit dans ma page, alors que sur une page test ça fonctionne nickel :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
this.createEmptyMovieClip("image_mc", 1);
var mclListener:Object = new Object();
mclListener.onLoadStart = function(target_mc:MovieClip) {
     target_mc.startTimer = getTimer();
};
mclListener.onLoadComplete = function(target_mc:MovieClip) {
     target_mc.completeTimer = getTimer();
};
mclListener.onLoadInit = function(target_mc:MovieClip) {
     var timerMS:Number = target_mc.completeTimer-target_mc.startTimer;
	 target_mc._xscale = target_mc._yscale /= 4;
		//target_mc._x = 100;
		//target_mc._y = 100;
};
var image_mcl:MovieClipLoader = new MovieClipLoader();
image_mcl.addListener(mclListener);
image_mcl.loadClip("images/Thumbs1.swf", image_mc);
Peut-être que ça vient de l'emplacement : j'ai ma page sur laquelle je mets un clip "scroller", et dans celui-ci un clip "images". Je mets le code dans ce sous sous clip pour que mon swf externe vienne bien ce placer dans le scroller. Est-ce que ça peut venir de là ?
nicolas2603 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 14h59.


 
 
 
 
Partenaires

Hébergement Web