Tuesday 24 June 2008
Memo AS3
Par Trân Nguyen Ngoc, Tuesday 24 June 2008 à 16:20 :: programmation
Un mémo perso pour les bouts de codes qu'on utilise tout le temps et qui ont changés en as3.
Pour créer une instance d'une classe dynamiquement créee :
Lorsque l'on crée un clip avec un champ texte dynamique et qu'on veut lui appliquer des comportements de bouton, le curseur de la souris ne change pas au survol du texte. Les champs texts émettant des événements TextEvent, cela provoque une confusion dans le flux des événements. Il faut alors désactiver cette diffusion par un mouseChildren = false;
Pour faire une boucle avec des noeuds xml, on n'utilise pas la propriété xml.length mais la fonction du même nom !
Pour loader un son dans la bibliothèque (feu attachMovie)
Pour récupérer les flashVar de l'embed
dans le swfObject de l'html :
Pour intégrer des polices
asfunction en AS3 : TextEvent.LINK remplace asfunction en AS3.
Pour effacer tous les displayObjects d'une sprite :
BulkLoader, loaderInfo, applicationDomain :
Pour accéder d'un swf chargé, à une classe "Bar" d'une librairie parent :
Pour activer le lissage sur une image loadée via bulkLoader :
Pour copier une image chargée via bulkLoader :
Pour couper la Netconnexion d'un flv chargé par le composant FLVPlayback : Même en utilisant la méthode myFlvPlayback.stop(), le composant continue à charger le flv.
Pour créer une instance d'une classe dynamiquement créee :
import flash.utils.getDefinitionByName; var dynamicClass:String = "btn" + i; var classRef:Class = getDefinitionByName(dynamicClass) as Class; var myBtn = new classRef(); addChild(myBtn);Désormais, en AS3, si une sprite est placé au-dessus d'un bouton, la zone cliquable du bouton n'est plus active. Pour le rendre à nouveau cliquable, il faut changer la propriété mouseEnabled de la sprite qui la recouvre :
mySprite.mouseEnabled = false;buttonMode sur un movieClip avec un champ dynamique
Lorsque l'on crée un clip avec un champ texte dynamique et qu'on veut lui appliquer des comportements de bouton, le curseur de la souris ne change pas au survol du texte. Les champs texts émettant des événements TextEvent, cela provoque une confusion dans le flux des événements. Il faut alors désactiver cette diffusion par un mouseChildren = false;
mc.buttonMode = true;
mc.mouseChildren = false;
mc.addEventListener(MouseEvent.CLICK, clickHandler);
function clickHandler(e:MouseEvent):void{
trace(e);
}
GetURL :
import flash.net.navigateToURL;
import flash.net.URLRequest;
navigateToURL(new URLRequest("myURL"), "_blank");
XmlPour faire une boucle avec des noeuds xml, on n'utilise pas la propriété xml.length mais la fonction du même nom !
for (i= 0 ; i < xml.length() ; i++) {
...
}
objet SoundPour loader un son dans la bibliothèque (feu attachMovie)
var mySound:mySoundId = new mySoundId(); // où mySoundId et le nom de liaison du son dans la bibliothèquePour loader un son et lui appliquer un volume
var mySound:mySoundId = new mySoundId(); var channel:SoundChannel = new SoundChannel(); var transform:SoundTransform = new SoundTransform(0.5); // (volume à 50%) channel = mySound.play(0, 0, transform);Pour autoriser au flash de lire sur n'importe quel domaine
import flash.system.Security;
Security.allowDomain("*");
Pour loader une librairie externe
var ldr:Loader = new Loader();
var url:String = "loaded.swf";
var urlReq:URLRequest = new URLRequest(url);
ldr.load(urlReq);
addChild(ldr);
ldr.contentLoaderInfo.addEventListener(Event.COMPLETE, completeHandler);
function completeHandler(event:Event):void {
var domain:ApplicationDomain = ldr.contentLoaderInfo.applicationDomain;
// MonClip est le nom de la classe que l'on veut atteindre dans le clip loadé
var MonClip:Class = domain.getDefinition("MonClip") as Class;
trace(domain.getDefinition("MonClip"));
var monClip = new MonClip();
addChild(monClip);
}
Pour récupérer les flashVar de l'embed
dans le swfObject de l'html :
var flashvars = {
varName:"maVariable"
};
dans l'as :
import flash.display.LoaderInfo; var myFlashVar:String = loaderInfo.parameters.varName;
Pour intégrer des polices
import flash.text.Font;
import flash.system.ApplicationDomain;
// Application domain
var fontDomain:ApplicationDomain = loader.getMovieClip("fonts").loaderInfo.applicationDomain;
// fonts
var FedraSerifAProDemiClass:Class = fontDomain.getDefinition("FedraSerifAProDemi") as Class;
Font.registerFont(FedraSerifAProDemiClass);
Puis pour l'utiliser :
import flash.text.TextFormat; import flash.text.Font import flash.text.TextField; var format:TextFormat = new TextFormat(); var txt:TextField; format.font = "Fedra Serif A Pro Demi"; txt.embedFonts=true; txt.setTextFormat(format);
asfunction en AS3 : TextEvent.LINK remplace asfunction en AS3.
var textfield:TextField = new TextField(); textfield.htmlText = "Ceci permet de passer des paramètres dans un champ texte dynamique"; textfield.addEventListener(TextEvent.LINK, linkHandler); addChild(textfield); function linkHandler(e:TextEvent):void { trace(e.type); // link trace(e.text); // param:valeur,param2:valeur }
Pour effacer tous les displayObjects d'une sprite :
while (mySprite.numChildren) mySprite.removeChildAt(0);
BulkLoader, loaderInfo, applicationDomain :
Pour accéder d'un swf chargé, à une classe "Bar" d'une librairie parent :
var foo:* = this.loaderInfo.applicationDomain.getDefinition("Bar");
Pour activer le lissage sur une image loadée via bulkLoader :
private function onImageLoaded(evt:Event):void {
evt.target.removeEventListener(Event.COMPLETE, onImageLoaded);
var bitMap : Bitmap = _loader.getBitmap(evt.target.id);
bitMap.smoothing = true;//turn on smoothing
}
Pour copier une image chargée via bulkLoader :
var_img: Bitmap = new Bitmap(_loader.getBitmapData(id).clone());
Pour couper la Netconnexion d'un flv chargé par le composant FLVPlayback : Même en utilisant la méthode myFlvPlayback.stop(), le composant continue à charger le flv.
player.getVideoPlayer(0).close();

