Aller au contenu

Diverses questions sur flash et AS3 !


Eagle1

Messages recommandés

effectivement on peux pas envoyer un paramètre de plus

le problème c'est que le chargement de mon fichier je veux le faire dans la fonction

et l'adresse du fichier à charger varie selon le lien sur lequel on clique

comme alternative je peux créé une fonction pour chaque lien, mais c'est moche et lourd...

Lien vers le commentaire
Partager sur d’autres sites

Je comprends.

Mais le problème est qu'il faut bien attribuer un addEventListener à chaque lien, afin que ces derniers réagissent au clic (ou à autre chose).

Sinon, j'ai regardé un peu le Detection Kit ... c'est bien, mais si Flash Player n'est pas installé, on est renvoyé à la page de téléchargement ... c'est intimidant et compliqué pour un visiteur néophyte.

Lien vers le commentaire
Partager sur d’autres sites

effectivement on peux pas envoyer un paramètre de plus

le problème c'est que le chargement de mon fichier je veux le faire dans la fonction

et l'adresse du fichier à charger varie selon le lien sur lequel on clique

comme alternative je peux créé une fonction pour chaque lien, mais c'est moche et lourd...

Les modèles évenementiels "out of the box" en ECMA script ne permettent pas de passer de paramètres pour une simple raison : en ECMA script les parenthèses () sont un opérateur d'execution.

Dont quand tu fais (attention pseudo-code) :

addEvent("event", callback);
addEvent("event", function(){ alert("je suis une fonction anonyme"); });
// tu execute la fonction addEvent qui accepte comme paramètre une
// String et un objet Function ou une référence à un objet Function

Donc quand tu fais :

addEvent("event", callback('param1', 'param2'));
// ton deuxième argument n'est pas un objet Function ou une référence à un objet Function
// mais la valeur retourné par ta fonction qui est executé, les parenthèses indiquent à l'interpréteur ECMA
// qu'il doit executer la fonction

De la même manière quand tu fais :

function func('param'){  alert('je suis une fonction'); }
var func = function('param'){  alert('je suis une fonction'); };
var func = new Function('param', 'alert("je suis une fonction")');
// ces trois lignes font la même opération elles EXECUTENT le constructeur de l'objet Function qui retourne une nouvelle
// occurence de Function avec des paramètres et un corps spécifique à cette occurence

Pour passer un paramètre à un écouteur il ne faut donc ne pas utiliser de parenthèse qui executent la fonction. Pour ce faire il faut utiliser un wrapper ce qui créera une "closure" et une persistance des paramètres dans la chaine de portée [[scope]] de ta fonction interne :

addEvent("event", function("param"){ callback("param"); });

Simplement en faisant cela tu perds la référence de ton objet Event ainsi que ton objet contexte (le premier objet dans la chaine de portée [[scope]] de ta fonction interne est ta fonction externe).

Le mieux est donc d'utiliser la méthode "apply" de l'objet Function afin de rétablir le bon scope et de passer tes arguments. Accessoirement comme apply prends comme second paramètre un Array, tu peux facilement transmettre l'objet Event à ta fonction interne comme ceci :

var wrapper = function(e){ func.apply(el, [e].concat(argumentsArray)); };
// ou 'el' est le contexte d'execution original
// et 'argumentsArray' un tableau contenant le ou les arguments d'origine

En actionscript il me semble que Macromedia te mache le travail en te fournissant une classe Delegate faisant déjà cette opération. Dans d'autres languages ECMA script comme le javascript il faut coder ta méthode Delegate toi même (ce qui prends environ une petite centaine de ligne, pour obtenir un résultat cohérent sur tous les navigateurs).

Lien vers le commentaire
Partager sur d’autres sites

attention ma dernière réflexion en date !!

avant j'utilisai un textarea, mais j'ai vu qu'avec un textfield, on pouvait associer un style css avec la classe styleSheet() !

donc c'est super !

var affichagecours = new TextField();
affichagecours.x = 400;
affichagecours.y = 300;
affichagecours.text = "pauvre text d'exemple";

alors je suis un peu bête, mais rien ne s'affiche....

comment faire pour afficher mon textfield ??

Lien vers le commentaire
Partager sur d’autres sites

Yo !

Légère correction :

var affichagecours:TextField = new TextField();
affichagecours.x = 400;
affichagecours.y = 300;
addChild(affichagecours);
affichagecours.text = "pauvre text d'exemple";

C'est addChild() qui permet l'affichage :mdr2:

Edit : t'as bien fait de changer le titre de ton topic :mdr:

Lien vers le commentaire
Partager sur d’autres sites

bon alors je me suis créé un beau TextField, je charge mon jolie fichier css externe, ça ça fonctionne nikel !!

/* création du textfield */
var affichagecours:TextField = new TextField();
affichagecours.x = 200;
affichagecours.y = 170;
addChild(affichagecours);
affichagecours.text = "Choisissez votre cours dans la liste de gauche et il s'affichera ici.";
affichagecours.border=true;
affichagecours.multiline=true;
affichagecours.width = 540;
affichagecours.height = 370;
affichagecours.scrollH=540;

/* fin création */

par contre mon fichier txt charger dans ce textfield a beucoup de text, et je voudrai vraiment qu'on ne sois pas obliger d'agrandir sur la droite pour voir la fin du text...

qu'il y ai un saut de ligne à la fin du textfield (sa taille y quoi)

et je ne trouve pas la propriétés ou la méthode qui correspond !

Lien vers le commentaire
Partager sur d’autres sites

ah ça faisais longtemps

:iloveyou:

donc dans mon fameux textfield qui charge du texte html cssé :iloveyou:

dans un code que je charge, je fais de l'img src et ça me dit ça :

Error #2044: IOErrorEvent non pris en charge : text=Error #2035: L'URL est introuvable.

j'ai comme l'impression qu'on peux pas ouvrir des images la dedans....

Lien vers le commentaire
Partager sur d’autres sites

re :byebye:

bon en s'en fou en faite :chinois:

la propriétés htmlText d'un textfield ne peux pas afficher des images apparemment

j'ai un autre problème :

j'ai un menu avec 3 boutons

lorsque clique sur le bouton 1 ça fait gotoAndPlay(nomframe1)

lorsque clique sur le bouton 2 ça fait gotoAndPlay(nomframe2)

mon problème viens que par exemple si je suis sur la frame1 et que je clique sur le bouton1, ça m'amène à la frame2

function gocreationsite(evt:MouseEvent) {
gotoAndPlay("creationdesite");
}

clickcreation.addEventListener(MouseEvent.MOUSE_DOWN,gocreationsite)

je voudrai donc mettre le gotoAndPlay dan un if qui ferrai

if(currentframe()=1)
{

}
else
{
gotoAndPlay(2)
}

le problème c'est que je sais pas utilisé currentframe :D et l'aide de flash est bien vide la dessus

edit :

honte sur moi

if(currentframe==1)
{

}
else
{
gotoAndPlay(2)
}

ciao

:D

Lien vers le commentaire
Partager sur d’autres sites

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...