Flash xpress : Portail de ressources Flash et Dreamweaver  - Accueil
Précédent   Forums Centre de Formation Flash et Dreamweaver > FAQ
S'inscrire FAQ Wiki Centre de formation Membres Calendrier Marquer les forums comme lus

Rechercher dans la FAQ Rechercher dans la FAQ
Rechercher les mots:
Options correspondantes:
Rechercher dans:

Actionscript 1

Actionscript 2
Introduction à l'ActionScript 2

Actions et généralités

Les objets

Des effets

Programmation orientée objet

Actionscript non documenté (Flash 5)
Cette rubrique regroupe les actions (actions, fonctions, propriétés...) qui existent dans Flash et qui n'ont pas été "documentées" (càd non présentes dans la documentation du logiciel lors de la sortie de Flash 5) : Attention, rien de vous garantit que les actions non documentées existeront encore dans les prochaines versions du logiciel. C'est le principe du "non documenté". Macromedia documente parfois certaines actions en cours de vie d'une version de logiciel. C'est le cas du asfunction (très utile!) que vous pouvez dorénavant utiliser sans compter - lors de tel changement, cette rubrique s'efforcera de vous en avertir !

ASNative

dehats:Bien, je tente une première contribution dans cette rubrique... Si je dis des bétises, n'hésitez pas à me corriger. Cité dans l'ancienne rubrique fxp, ASNatvie n'y était pas développé. Voilà ce que j'en ai compris, tel que décrit dans WikiFlashCoders:

En général, ASNative (i,j) retourne la référence d'une fonction. On peut en effet accéder aux fonctions de Flash stockées par lignes et colonnes. Une manière de travailler avec les fonctions ASNative est d'assigner le résultat à une variable, et d'executer ensuite la variable comme fonction. Le 1er paramètre est l'index de la table de fonctions dans le Flash Player, le second est l'index à l'intérieur de cette fonction.

exemple: la référence de la fonction "trace" est (100,4).

t = ASnative(100, 4);

t ("salut!");//output : salut!

Les arguments de ASNatvie sont des nombres Hexadécimaux. Quelques références ASNative: MATH:

 200,0 abs
 200,1 min
 200,2 max
 200,3 sin
 200,4 cos
 200,5 atan2
 200,6 tan
 200,7 exp
 200,8 log
 200,9 sqrt
 200,10 round
 200,11 random
 200,12 floor
 200,13 ceil
 200,14 atan
 200,15 asin
 200,16 acos
 200,17 pow
 200,18 isNaN
 200,19 isFinite

autres:

 3,0 very similar to toString(), but with differences
 5,0 mouse show
 5,1 mouse hide
 100,0  escape
 100,1  unescape
 100,2  parseInt
 100,3  parseFloat
 100,4  trace
 301,1 getUrl
 800,2 (1) returns true if mouseDown
 800,3 (1) returns true/false value which is toggled by every mouse down event

ASInstanceOf

Permet de déterminer de quelle classe un objet est l'instance. En fait, ASInstanceOf compare la propriété _proto_ de l'objet spécifié(1er paramètre) à un prototype spécifié(2nd paramètre) et renvoie une valeur booléenne (true or false). Aurement dit, il prend deux paramètres

  • Instance
  • Class Proto

"Instance" peut être n'importe quel objet autres que String, Function et Movie Clip. "Class Proto" peut être n'importe quel prototype d'objet autre qu'un prototype de String.

exemple:

	 myClass1=function() {
	 }
	 myClass2=function() {
	 }
	 myInstance1=new myClass1();
	 myInstance2=new myClass2();
	 if(ASInstanceOf(myInstance1,myClass1.prototype)) {
		trace("myInstance1 is instance of myClass1 class");
	 }
	 if(ASInstanceOf(myInstance2,myClass2.prototype)) {
		trace("myInstance2 is instance of myClass2 class");
	 }
	 if(!ASInstanceOf(myInstance1,myClass2.prototype)) {
		trace("myInstance1 isn't instance of myClass1 class");
	 }

ASClamp

Vérifie les limites d'un nombre. Il prend 3 paramètres:

  • n
  • min
  • max

max>n>min (renvoie n)

n<min (renvoie min)

n>max (renvoie max)

Il n'y a pas de différence manifeste entre ASClamp et ASClamp2.

Voici comment il est défini dans le player:

    function AsClamp? (v, mn, mx) {
        if (isNaN(v)) {
            v = 0;
        }
        return (Math.max(mn, Math.min(number (v), mx)));
    }

ASClamp2

Po compris la différence avec ASClamp :-(

ASnew

Détermine si la fonction qui l'appelle a été appellée avec le constructor "new". ASNew renvoie "true" ou "false". La fonction ayant invoqué ASNew peut agir en conséquence (NDT:"The function wich invoked ASnew can take actions accordingly") ASNewsemble être appellé comme une méthode de _flash. C'est à dire:

mavariable = _flash.ASNew();

Néanmoins, ASNew échoue quand il est appellé comme méthode de n'importe quel objet connu, _flash y compris...(?)

MovieClip.meth

Array.qsort(startIndex,endIndex[,orderfunc])

Permet de trier une portion de tableau en précisant les bornes de la partie à trier.

  • startIndex: index de départ du tri
  • endIndex: index de fin du tri
  • orderfunc: fonction de tri (ce paramètre fonctionne comme pour .sort())

exemple:

 bob =["c","b","a","e","d"];
 bob.qsort(1,2);
 trace (bob); // renvoie c,a,b,e,d

ASSetNative

Assigne les références de la fonction ASNative aux propriétés d'un objet. Il est probablement executé en interne au moment de l'initialisation du flash Player pour assigner les méthodes à chaque prototype de Class construit. 4 paramètres:

  • targetObject
  • i
  • propList
  • j

ASSetPropFlags

Permet d'afficher ou masquer les méthodes et propriétés contenues dans le prototype des objets, y compris les objets prédéfinis

XML.init()

XMLNode()

notes de mise à jour

dehats(22/04/02): j'ai ajouté ASNative, ASInstanceOf, ASNew, ASClamp, et ASSetNative (mais je galère un peu sur ce dernier...)


Actionscript non documenté (Flash MX)

TextField.condenseWhite

supersatori un truc très très pratique: sur du textField HTML, pour que les comportements des espaces blancs soient comme dans un interpréteur HTML:

 createTextField("ts",1,0,0,350,350);
 ts.html=true;
 ts.condenseWhite=false;
 txt="e aaeae \t azeaz zae aaze aze      az ezea ";
 ts.htmlText=txt;
 onMouseDown=function() {
 	trace("on refait");
 	ts.condenseWhite=true;
 	ts.htmlText+=" ";
 };

bien noter que le condenseWhite n'est mis à jour que lorsque le htmlText du textField est modifié, d'où ici par exemple l'ajout d'un espace. Vraiment vraiment béton :)

supersatori update: il semble que Collin Moock confirme que cette propriété est exploitable et sera conservée.

_listeners

mama 07/04/02: _listeners est une propriété des objets pour lesquels ont peut ajouter des listeners (Stage, TextField, Key, Mouse et Selection). _listeners est un tableau qui contient la liste des listeners de l'objet concerné. _listeners comme tous les tableaux possède une propriété length qui donne sa longueur.

	bob={}
	bob.nom="bob";
	bob.onMouseDown=function () { trace ("héhé")};
	bill={}
	bill.nom="bill";
	bill.onMouseDown=function () { trace ("héhé")};
	Mouse.addListener(bob);
	Mouse.addListener(bill);
	trace ("longueur: "+Mouse._listeners.length);
	for (var z=0;z<Mouse._listeners.length;z++) trace (Mouse._listeners[z].nom);
	Mouse.removeListener(bill);
	trace ("longueur: "+Mouse._listeners.length);
	for (var z=0;z<Mouse._listeners.length;z++) trace (Mouse._listeners[z].nom);

	/* renvoi
	longueur: 2
	bob
	bill
	longueur: 1
	bob
        */

supersatori: Tout comme l'ordre d'enregistrement des listeners, l'ordre des elements dans _listeners définit l'ordre d'execution des listeners. On peut donc aussi utiliser par exemple sortOn:

 monGest={};
 ASBroadcaster.initialize(monGest);
 a= { name : "a" , listen: function() { trace ("listener a") } };
 b= { name : "b" , listen: function() { trace ("listener b") } };
 c= { name : "c" , listen: function() { trace ("listener c") } };
 monGest.broadcastMessage("listen");
 monGest._listeners.sortOn("name");
 monGest.broadcastMessage("listen");

LoadVars

mama 07/04/02:

  • decode
	bob=new LoadVars();
	bob.decode("nom=bob&age=55&taille=130&sexe=M");
	for (var z in bob) trace (z+ ": "+bob[z]);
	/* renvoi
	sexe: M
	taille: 130
	age: 55
	nom: bob
        */
  • onData
	boby=new LoadVars();
	boby.onData=function (pData) {
	trace ("ok le chargement est réussi, reste plus q'a décoder ;)");
	trace ("données chargées et non parsées: "+pData);
	}
	boby.load("http://www.flashxpress.net/loadvars.txt");
	/* renvoi
	ok le chargement est réussi, reste plus q'a décoder ;)
	données chargées et non parsées: bill=trop fort
        */

le couple onData/decode est l'équivalent de onData/parseXml de l'objet Xml pour l'objet LoadVars

ASBroadcaster

mama 07/04/02:

  • asBroadcaster.broadcastMessage
  • asBroadcaster.initialize
  • asBroadcaster.addListener
  • asBroadcaster.removeListener
  • lien interessant d'exemples: http://www.bomber-studios.com

ASBroadcaster permet d'ajouter des "listeners" à n'importe quel objet. Leur utilisation est similaire aux listeners de Flash MX, sauf qu'il faut déclencher l'evenement. supersatori : Un seul gestionnaire d'evenement peut gérer plusieurs évènements utilisateurs. Il possède comme les autres système de listeners une propriété tableau _listeners.

 bob={};
 ASBroadcaster.initialize(bob);
 a = {salut:function () {trace ("salut de a")} , ciao : function () {trace("ciao de a")} }
 b = {salut:function () {trace ("salut de b")}}
 c = {salut:function () {trace ("salut de c")}}
 bob.addListener(a);
 bob.addListener(b);
 bob.addListener(c);
 bob.broadcastMessage("salut");
 bob.broadcastMessage("ciao");

mama - 24/04/02: Les objets de haut niveau que sont Mouse, Selection, Key, Stage et l'objet TextField possède la méthode broadCastMessage:

 bob= {test: function () { trace ("héhé") }}
 Mouse.addListener(bob);
 Mouse.broadcastMessage("test");

supersatori : De plus on peut utiliser ASBroadcaster pour créer un gestionnaire d'enterframe sur n'importe quel objet, pas seulement les movie clips:

 this.createEmptyMovieClip("EnterFrame",271824897);
 ASBroadcaster.initialize(EnterFrame);
 EnterFrame.onEnterFrame=function () {
 	this.broadcastMessage("onEnterFrame");
 }
 a={ onEnterFrame : function () { trace("objet a onEnterFrame");} }
 EnterFrame.addListener(a);

ASSetPropFlags

gag 05/04/02: ça existait déjà dans Flash 5, mais ça fonctionne légèrement différemment ds MX (un paramètre supplémentaire)... voici qques infos (la majorité provient du WikiFlashCoders):

  • ASSetPropFlags prend 4 paramètres (le 4ème est optionnel), dans l'ordre:
    1. l'objet dont on souhaite cacher, révéler ou protéger des propriétés.
    2. la liste des propriétés à protéger, déprotéger, cacher ou révéler, passée sous la forme d'un tableau ou d'un objet (ou d'une chaine s'il n'y a qu'une seule propriété). Si ce paramètre est mis à null, ce sont toutes les propriétés de l'objet qui seront affectées.
    3. un nombre entier, qui détermine quelle action effectuer (protéger, cacher, révéler,...)....référez vous au tableau ci-dessous pour les détails...
    4. Contrairement à ce qui était écrit précédemment, le 4ème paramètre n'est pas un booléen, mais un nombre entier qui, comme le 3ème paramètre, permet de modifier les attributs d'une propriété, mais en les désactivant, plutôt qu'en les activant... L'intérêt de la chose amha est surtout que maintenant on peut facilement modifier chacun des attributs indépendamment des autres:
 Object.prototype.setPropEnumerable = function(pProp, pBool){
  ASSetPropFlags(this, pProp, pBool ? 0 : 1 , pBool ? 1 : 0 );
 }
 Object.prototype.setPropErasable = function(pProp, pBool){
  ASSetPropFlags(this, pProp, pBool ? 0 : 2 , pBool ? 2 : 0 );
 }
 Object.prototype.setPropWritable = function(pProp, pBool){
  ASSetPropFlags(this, pProp, pBool ? 0 : 4 , pBool ? 4 : 0 );
 }

 Object.prototype.getPropEnumerable = function(pProp){
  return this.isPropertyEnumerable(pProp);
 }
 Object.prototype.getPropErasable = function(pProp){
  var tmp = this[pProp];
  if(tmp === undefined) return false;
  delete this[pProp];
  if(this[pProp] === undefined){
   this[pProp] = tmp;
   return true;
  }else{
   return false;
  }
 }
 Object.prototype.getPropWritable = function(pProp){
  var newVal = (this[pProp] == 0) ? 1 : 0;
  var tmp = this[pProp];
  this[pProp] = newVal;
  if(this[pProp] == newVal){
   this[pProp] = tmp;
   return true;
  }else{
   return false;
  }
 }
 ASSetPropFlags(Object.prototype,
   "setPropEnumerable,setPropErasable,setPropWritable,getPropEnumerable,getPropErasable,getPropWritable",
  1);
 // gag (et P.Hall pour les getters^^)

Tableau de référence

	n%8  nbits  protègé en écriture?  protègé de l'effacement?	caché?

 	0(n==0)  000	-			-			 -
 	0(n!=0) 1000	  non		   non				non
 	1	001	  non		   non				oui
 	2	010	  non		   oui				non
 	3	011	  non		   oui				oui
 	4	100	  oui		   non				non
 	5	101	  oui		   non				oui
 	6	110	  oui		   oui				non
 	7	111	  oui		   oui				oui

Exemples d'utilisation

1. Voir toutes les propriétés d'un objet:
ASSetPropFlags(Color.prototype,null,0,1);
for (var z in Color.prototype) trace (z+": "+Color.prototype[z]);

2. Protéger certaines propriétés contre l'effacement:
monObjet = {propSuperImportante:3478156,propDontOnSeFout:100,propSuperImportante2:487813,propDontOnSeFout2:50};
ASSetPropFlags(monObjet,["propSuperImportante","propSuperImportante2"],2);

for (var z in monObjet) delete monObjet[z];
for (var z in monObjet) trace (z+": "+monObjet[z]);

3. Eviter de polluer une sous-classe ou une occurence:

Object.prototype.fonctionPerso = function(){};
Object.prototype.fonctionPerso2 = function(){};

ASSetPropFlags(Object.prototype,"fonctionPerso",1);

myObj = {};
for (var z in myObj) trace (z+": "+myObj[z]);

4. Cacher les méthodes privées d'une classe:
maClasse = function(){};
maClasse.prototype.methodePublique = function(){};
maClasse.prototype.methodePrivee = function(){};

ASSetPropFlags(maClasse.prototype,"methodePrivee",7);

bob = new maClasse();
for (var z in bob) trace (z+": "+bob[z]);

Conclusion: c'est vraiment bien cool:-) (gag - 05/04/02)

Microphone

supersatori:HOWTO: Explorer les fonctions cachées d'un objet exemple microphone:

 scanned=Microphone;
 mono=scanned.get();
 trace("***instance");
 ASSetPropFlags(mono,null,8,1);
 for (var i in mono) {
 		trace(i+"  "+mono[i]);
 }
 trace("***constructeur");
 ASSetPropFlags(mono.constructor,null,8,1);
 for (var i in mono.constructor) {
 		trace(i+"  "+mono.constructor[i]);
 }
 trace("***constructeur.prototype");
 ASSetPropFlags(mono.constructor.prototype,null,8,1);
 for (var i in mono.constructor.prototype) {
 		trace(i+"  "+mono.constructor.prototype[i]);
 }

nous sort entre autres choses:

 muted  true --> propriété muted booleene.
 useEchoSuppression  0 --> propriété useEchoSuppression nombre.
 gain  50 --> propriété gain nombre
 rate  8 --> propriété rate nombre
 silenceTimeOut  2000 --> propriété silenceTimeOut nombre
 silenceLevel  10 --> propriété silenceLevel nombre
 name  Gamesurround Fortissimo II --> propriété name string
 activityLevel  -1 --> propriété activitylevel nombre
 index  0 --> propriété index nombre

 get  [type Function] --> méthode trouvée dans le constructeur
 setUseEchoSuppression  [type Function] --> méthode setUseEchoSuppresion
 setGain  [type Function] --> méthode setGain
 setRate  [type Function] --> méthode setRate
 setSilenceLevel  [type Function] --> méthode setSilenceLevel


et j'avais mis un bout de code rigolo sur le forum aussi ;)

 m=microphone.get();
 this.attachAudio(m);
 s=new Sound(this);
 s.setVolume(0);
 tabLev=new Array(20);
 this.onEnterFrame=function() {
 	tabLev.push(m.activityLevel*2);
 	tabLev.shift();
 	this.clear();
 	for (var i=tabLev.length-1;i>=0;i--){
 		this.moveTo(i*10,0);
 		this.beginFill(0xff0000,100);
 		this.lineTo(i*10,tabLev[i]);
 		this.lineTo(i*10+10,tabLev[i]);
 		this.lineTo(i*10+10,0);
 		this.lineTo(i*10,0);
 		this.endFill();
 	}
 }

#authoring

_bytecode_()

http://www.flashxpress.net/forum/showthread.php?s=&threadid=30512

System.capabilities.isDebugger

Cette propriété non documentée retourne un booleen précisant si on est dans le lecteur Debug ou pas


Actionscript non documenté (Flash MX 2004)
Le but de cette page est référencer vos remarques ou découvertes concernant l' AS non documentée Cette rubrique regroupe les actions (actions, fonctions, propriétés...) qui existent dans Flash et qui n'ont pas été "documentées" (càd non présentes dans la documentation du logiciel lors de la sortie de Flash MX 2004) : Attention, rien de vous garantit que les actions non documentées existeront encore dans les prochaines versions du logiciel. C'est le principe du "non documenté". Macromedia documente parfois certaines actions en cours de vie d'une version de logiciel. C'est le cas du asfunction (très utile!) que vous pouvez dorénavant utiliser sans compter - lors de tel changement, cette rubrique s'efforcera de vous en avertir !

TextField.StyleSheet.onData

Comme l'ensemble des objets chargeant des données externes, il est possible d'intercepter les données brutes ctrhargées avant que le parseur interne de la classe s'exécute, c'est le cas de XML, XMLSocket, !Loadvars. Pour certain objet cette méthode est délibérément masquée (pour des raisons obscures), c'est le cas de l'objet LoadVars ou TextField.StyleSheet, cette méthode est la méthode TextField.StyleSheet.onData que vous pouvez utiliser si vous souhaiter traiter vous même les données extraites du fichiers CSS externe:

	monStyle=new TextField.StyleSheet();
	monStyle.onData=function (pData) {
	trace ("récupération de la feuille de style sous forme de chaîne brute");
	trace (pData);
	}
	monStyle.load("style.css");



© 2001-2009 Flashxpress, B. Gac et G. Monnier



Édité par : vBulletin® version 3.7.2
Copyright ©2000 - 2010, Jelsoft Enterprises Ltd. Tous droits réservés.
Version française #12 par l'association vBulletin francophone