Pb : l'image se centre a partir du deuxieme clic seulement

Résolu
Messages postés
140
Date d'inscription
mercredi 30 avril 2003
Statut
Membre
Dernière intervention
15 mai 2008
-
Messages postés
140
Date d'inscription
mercredi 30 avril 2003
Statut
Membre
Dernière intervention
15 mai 2008
-
débutant en c/c++, flash et asm- [mailto:cedbillard@voila.fr Me contacter]

Je veux centrer une image externe aux dimensions aleatoire sur mon animation, pour cela j'ai créé plusieurs fonctions. Lors du clique sur le bouton demandant a afficher l'image, l'image ne se centre pas la premiere fois, il faut cliquer une deuxieme fois pour le centrage de l'image..
Comment faire ?

Voila le code de mes fonctions a la premiere frame de l'anim.

_root.createEmptyMovieClip("pic", 1); //creation d'un clip vide nommé pic

function position()
{
posx=(500-(_root.pic._width))/2; //calcul pour centre sur x
posy=((500-(_root.pic._height))/2)+250; //calcul pour centrer sur y
//positionnement de l'image
_root.pic._x=posx;
_root.pic._y=posy;
}

function affichage(lien) {//lien : lien de l'image a chargé

loadMovie(lien,_root.pic);
}

Code sur le bouton :

on(release)
{

_root.lien=lelien; //lelien vient d'un fichier xml, je ne presente pas le code pour ca, il est correct, je fais appel a une fonction qui renvoie le lien voulu.......
affichage(lien);
position();

}

merci de m'aider. a+

10 réponses

Messages postés
536
Date d'inscription
lundi 5 mai 2003
Statut
Membre
Dernière intervention
29 janvier 2009
1
Salut !

En fait ca vient du temps de chargement ! Tu essay de placer l'image en fonction de sa taille alors que le flash n'a toujours pas récup lefichier (du coup sa taille non plus)

Faut faire un truc du genre :

on(release)
{

_root.lien=lelien;
affichage(lien);

_root.pic.onEnterFrame=function()
{
if(this.getBytesTotal()==this.getBytesLoaded()) // test si le fichier est chargé
{
position(); // attention au chemin de la fonction par rapport à _root.pic !
delete this.onEnterFrame;
}
}
}

voila ! ca devrait êter bon !

allé a+++
Messages postés
536
Date d'inscription
lundi 5 mai 2003
Statut
Membre
Dernière intervention
29 janvier 2009
1
lusss !

jamais utilisé le MovieClipLoader mais essay :

monEcouteur.onLoadComplete = function () // le _root.pic doit etre implicite !
{
_root.positionpic();
}
Messages postés
140
Date d'inscription
mercredi 30 avril 2003
Statut
Membre
Dernière intervention
15 mai 2008
1
Merci, je suis sur que c t ca le probleme.
Mais le code que tu m'a passé, ne centre plus du tout, il positionne l'image toujours a 0,0 (avant c t un peu aleatoire la position), meme quand on clique sur le bouton suivant qui n'a pas ce code :

_root.pic.onEnterFrame=function()
{
if(this.getBytesTotal()==this.getBytesLoaded()) // test si le fichier est chargé
{
position(); // attention au chemin de la fonction par rapport à _root.pic !

delete this.onEnterFrame;
}
}

Peux-tu m'expliquer le code _root.pic.onEnterFrame=function() et delete this.onEnterFrame;
(ca creer une fonction temporaire ?)

Merci !
Messages postés
536
Date d'inscription
lundi 5 mai 2003
Statut
Membre
Dernière intervention
29 janvier 2009
1
ouep c ca, cf doc flash :
Gestionnaire d’événement ; invoqué continuellement à la cadence de l’animation.

et le delete c'est pour supprimer cette fonction qui ne sert plus a rien une fois l'image chargée !

là ca ne doit pas fonctionner car ta fonction position() ne se trouve pas dans le clip _root.pic

ex :

_root.pic.onEnterFrame=function()
{
trace (this._name); // Affiche 'pic' !
}

donc du coup il faut que tu change l'accès à ta fonction position() :

_root.position(); si c'est sur _root par exemple !
Messages postés
140
Date d'inscription
mercredi 30 avril 2003
Statut
Membre
Dernière intervention
15 mai 2008
1
débutant en c/c++, flash et asm- [mailto:cedbillard@voila.fr Me contacter]

Desole pour le gros texte, ce n'etait pas aussi gros dans l'editeur.

J'ai compris le code, le probleme, tout ce que tu m'as dit mais ca veut tj pas marché, voila le code

on (release) {
_root.lien=lelien;
loadMovie(_root.lien,_root.pic); //au lieu de affichage() qui fais juste ca
_root.pic.onEnterFrame = function() {

if (this.getBytesTotal() == this.getBytesLoaded()) {
// test si le fichier est chargé
_root.positionpic();
delete this.onEnterFrame;
}
};

}

et la fonction :

function positionpic() //ca doit etre ca qui va pas alors ?
{
posx=(500-(_root.pic._width))/2;
posy=((500-(_root.pic._height))/2)+250; //le + 250 c'est parce que je centre sur une partir de l'animation, c bon
_root.pic._x=posx;
_root.pic._y=posy;
}

merci beaucoup !
Messages postés
536
Date d'inscription
lundi 5 mai 2003
Statut
Membre
Dernière intervention
29 janvier 2009
1
ta fonction positionpic() est bien sous _root ?

si oui, ca devrait etre bon !

tu peux rajouter un
getURL("javascript:alert('test')");

dans ta fonction pour tester qu'elle est bien appelée !

sinon tu peux remplacer :
loadMovie(_root.lien,_root.pic);

par :
_root.pic.loadMovie(_root.lien);
Messages postés
140
Date d'inscription
mercredi 30 avril 2003
Statut
Membre
Dernière intervention
15 mai 2008
1
débutant en c/c++, flash et asm- [mailto:cedbillard@voila.fr Me contacter]

Hum, en effet elle n'est pas appelé.

Pourtant, la fonction positionpic() , je l'ai ecrite dans la premiere frame de l'animation principal, c donc bon, non ? (elle n'est pas sur un clip ou a l'interieur d'un clip)
Messages postés
536
Date d'inscription
lundi 5 mai 2003
Statut
Membre
Dernière intervention
29 janvier 2009
1
ouep c bon !

mets ton getURL juste après le if(getBytesLoaded ....)

pour voir si il rentre dans le if !

PS : pourré pas te repondre avant lundi là dsl !
a+++ bon we !
Messages postés
140
Date d'inscription
mercredi 30 avril 2003
Statut
Membre
Dernière intervention
15 mai 2008
1
débutant en c/c++, flash et asm- [mailto:cedbillard@voila.fr Me contacter]

je crois que j'ai trouve, il faut utiliser MovieClipLoader, mais je n'arrive pas tres bien a m'en servir malgres l'aide de Flash

voila ce que j'ai sur mon bouton :

....
var test = new MovieClipLoader();
monEcouteur = new Object();

test.addListener(monEcouteur);
test.loadClip(_root.lien,_root.pic);
_root.pic.loadMovie(_root.lien);

monEcouteur.onLoadComplete = function (_root.pic)
{
_root.positionpic();
}

l'erreur est :
')' ou ',' attendu
monEcouteur.onLoadComplete = function (_root.pic)

Merci encore et a la prochaine !!
Messages postés
140
Date d'inscription
mercredi 30 avril 2003
Statut
Membre
Dernière intervention
15 mai 2008
1
débutant en c/c++, flash et asm- [mailto:cedbillard@voila.fr Me contacter]

C bon, c'etait bien cette erreur (il ne fallait pas mettre _root.pic).
L'image se charge, l'ecouteur fonctionne mais il n'est apparemment pas possible de recuperer la taille du clip (image chargé) :

pour _root.pic._height et _root.pic._width, il renvoie 0.....alors que pour un movieClip il renvoie bien la taille correspondant....
Le repositionnement fonctionne mais pas le calcul de la position en fonction de la taille, ce qui m'est inutile ici !

J'ai donc detourne le probleme, en utilisant les fonctions des moviesClips....
Mais au lieu de mettre les actions sur mon bouton je l'ai mis sur un clip vide en enterFrame avec variables...

Quand il faut charge une image, je met une variable a true et je charge par le code sur le clip vide, ensuite je verifie constamment si cette image a fini d'etre chargé jusqu'a la fin de son chargement et la je repositionne l'image...

Donc c bon ca marche...

Merci beaucoup pour ton aide !