mercredi, mai 10 2006

[pixLib] - GraphicLib et MovieClipHelper vs MovieClip (partI)

Ce qui suit aurait du être en ligne depuis bien longtemps, car à mes yeux il s'agit d'une des pierre angulaire de pixLib. Depuis ça découverte je ne peux plus m'en passer. :)

AbstractLib

Commençons par le commencement, et donc par AbstractLib, une classe abstraite (constructeur privé) qui est étendu par l'ensemble des «librairies» de pixLib.

Quelques variables…

AbstractLib possède plusieurs variables privées accessible via des méthode public :

  • Un nom (String) -> getName, setName
  • Une URL (String) -> getURL, setURL
  • Un TimeOut (Number) -> getTimeOut, setTimeOut
  • Un contenu (non typé) -> getContent, setContent
  • Force le chargement (Boolean) -> setAntiCache(avec/sans cache)
  • Un niveau de chargement -> getBytesLoaded, getBytesTotal, getPerCent
Quelques methodes…
  • load, lance le chargement.
  • execute, qui lance load.
  • release, détruit la gestion d'événement.
Une gestion d'événement…
  • initEventSource, initialise le type d'événement (LibEvent).
  • fireEvent, permet d'envoyer un événement typé LibEvent à l'ensemble des abonnées.
  • fireEventType, permet d'envoyer un événement typé EventType à l'ensemble des abonnées.
  • addListener, permet de s'abonner à l'ensemble des événements.
  • removeListener, permet de se désabonner de l'ensemble des événements.
  • addEventListener, permet de s'abonner à un type d'événement.
  • removeEventListener, faut vraiment que je le dise ?! (comme haut dessus mais l'inverse). ^^

Pour en savoir plus sur la gestion d'événement dans pixLib -> pixLib une programmation événementielle typée.

Voilà pour l'AbstractLib, il s'agit donc d'une classe abstraite qui a tous les outils nécessaire pour gérer le chargement d'un contenu, chacune des classes filles sert à gérer le chargement de contenu plus spécifique, comme GraphicLib qui est spécialisé dans le chargement des swf, jpeg et png de puis Flash8.

Lire la suite...

lundi, mai 8 2006

[pixLib] - LibStack ou le multi-chargement

Bonjour,
suite à une question posé sur le forum de media-box, je me suis décidé à faire une introduction sur le multi-chargement dans pixLib.

Ce que j'appelle le multi-chargement est en fait la mise sous forme de pile (stack) une liste d'objets que l'on veut charger. Pour réaliser ce chargement progressif pixLib possède la classe LibStack. :)

Outils

Comment utiliser la LibStack ?

Avant toute chose il faut savoir que si on utilise pixLib ce n'est pas pour simplement charger un swf ou un jpeg et le manipuler tel quel, mais bien pour charger ceux-ci directement dans une librairie de pixLib (outils qui facilite leur manipulation).
Pour faire du multi-chargement il suffit tout d'abord de construire une instance de LibStack, à laquelle on ajoute la liste des éléments que l'on veut charger ainsi que le type de librairie que l'on veut obtenir à la sortie, il ne reste plus qu'a lancer le chargement. La LibStack va charger chaque éléments de la liste, les uns après les autres et les placer dans une instance de librairie voulu, que du bonheur. :) Bien évidement à quoi nous servirait cette outils si il n'était pas fourni avec un bon gestionnaire d'événement ?! Rassurez vous tout a été pensé. ;)

Voyons maintenant ce que ça donne pratiquement.

Ajouter un élément.

public function enqueue(o:ILib, sName:String, sURL:String) : String

La fonction enqueue prends trois arguments et retourne une chaine.

  • o:ILib -> ILib est une interface, qui est implémentée par AbstractLib, une classe abstraite qui est étendu par toutes les librairies de pixLib. En français cela veut dire que l'on peut utiliser n'importe quelle instance de ConfigLoader, GraphicLib, LibStack, VideoDisplay, XMLToObject ou une classe qui implémente ILib comme premier argument de la fonction enqueue().
  • sName:String -> Il s'agit du nom qui serra donné à o:ILib (nom d'instance), c'est ce dernier qui sort en retour de la fonction.
  • sURL:String -> Il s'agit de l'URL du fichier que l'on veut charger (swf, jpeg, xml).

Les événements.

L'instance de LibStack renvoi l'ensemble des événements reçu par la librairie qui est occupé d'être chargé (ILibListener) plus un événement propre à LibStack (onLoadComplete).

  • onLoadInit -> A chaque fois qu'une librairie est finie de charger.
  • onLoadProgress -> Tout au long des différents chargements.
  • onLoadComplete -> Quand toutes les librairies sont chargées.
  • onTimeOut -> Lancé à chaque fois que le timeOut est écoulé (10 secs par défaut).

Un exemple complet avec la GraphicLib :

import com.bourre.data.libs.GraphicLib;
import com.bourre.data.libs.LibEvent;
import com.bourre.data.libs.LibStack;
 
// On crée une instance de LibStack
var oLibStack:LibStack = new LibStack();
 
// On instancie les différentes librairies que l'on veut charger en stipulant la cible et la profondeur,
et en option si le contenu est visible à la fin du chargement (true par defaut).
var gl:GraphicLib = new GraphicLib(this, 5); var gl2:GraphicLib = new GraphicLib(this, 10, false);   // On ajoute les instances de GraphicLib dans la LibStack
en précisant le nom et l'URL des fichiers à charger dedans.
oLibStack.enqueue( gl, "Animation", "anim.swf"); oLibStack.enqueue( gl2, "Photoa", "image.jpg");   function onLoadInit(e:LibEvent) : Void { trace(e.getName()); } function onLoadProgress(e:LibEvent) : Void { trace(e.getName() + ' : ' + e.getPerCent() + '%'); } function onLoadComplete(e:LibEvent) { // Ici on peut lancer une fonction qui serra exécuter à la fin de tous les chargement. } function onTimeOut(e:LibEvent) : Void { // On peut utiliser setTimeOut pour le modifier le délais de 10 secs par défaut. trace("Le chargement de " + e.getName() + " a échoué!"); }   // On ajoute s'abonne au écouteurs écouteur oLibStack.addListener( this ); // On lance le chargement oLibStack.execute();

La suite au prochaine épisode. ;)

mardi, avril 18 2006

[Paris] - Flash festival

Affirmation

L'été approche et le temps des festivals aussi. :)

Après une courte hésitation (juste pour dire), j'ai décidé de m'offrir un petit week-end à Paris, genre arrivée le vendredi 26 mai fin d'aprem et retour le dimanche soir. :)

Par contre je connais pas bien le quartier, donc si vous avez des hôtels sympa pas trop loin du centre Pompidou, je suis preneur. :)

Question

Qui sera de la partie, le 27 mai ?

Informations


Flash Festival Paris 2006.

mardi, mars 21 2006

[Flex2] - Beta2, ça se chargera

Si on se rends sur la page de chargement de la bêta de Flex2 et du FlashPlayer8.5 on apprends que la beta2 est disponible, quand on click sur les liens on tombe sur des «not found», sans pousser le résonnement bien loin, on peut se dire que la sortie de la beta2 est imminente, et qui sait une version pour osX :p , bien que aucun lien ne l'indique! :/

The requested URL /pub/esd/labs/flex2/FlexBuilder2_B2_03-16.exe was not found on this server.
The requested URL /pub/esd/labs/flex2/Player8.5_B2_OSX_03-20.dmg was not found on this server.

flex2 beta2 preview

MAJ - 22 mars

Après 24 heures sans connexion, ce qui était prévu arriva la beta2 est disponible au chargement. :)

Au programme des nouveautés on retrouve une nouvelle classe caché, Dictionary est une classe qui permet de stocker des paires clef/valeur et de les récupérer à tout moment à la manière d'une map. Pour en savoir plus sur cette classe je vous conseille d'aller faire un saut sur Tweenpix où Francis nous fait découvrir cette dernière.

vendredi, février 24 2006

[FDT] - La RC 1.1 est sortie

Salut,
Petite nouvelle du jour pour tous les utilisateurs de FDT. Depuis hier après-midi une version en release candidat de FDT est disponnible à cette adresse : http://fdt.powerflasher.com/updateTest/. La procédure d'installation est toujours la même, c'est juste l'adresse qui change.

Pour la liste des nouveautées :

All updates in detail 1.0.6.5(20060222)

IMPORTANT: FDT from now on needs Eclipse >= 3.1 and so is not running on 3.0.x any more!

BUGFIX: Semantic analysis allowes assignment of anything to booleans
BUGFIX: "return Function()();" is type "Function" -> Should be "Object"/untyped.
BUGFIX: variables with "$" in their name wont work on quickfix templates
BUGFIX: sometimes stackOverflow error at circular refs
BUGFIX: "Exception" as type in "BlaException" becomes "BlaException" after rename-refactoring
BUGFIX: Content Outline: Type is allways closed
BUGFIX: Type Hierarchy: target document has no focus
BUGFIX: SWF Viewer does not start when location string length < 4 Chars
BUGFIX: wrong error "missing returntype" if "throw" statement is there
BUGFIX: no typecheck at variable initializer
BUGFIX: unnecessary singleline folds
BUGFIX: duplicate UTF-8 BOM creation(UTF-8 BOM is now created when document is opened)
BUGFIX: FlashExplorer loops open editors if selected multiple asFiles while linking editors is enabled

NEW: Quickfixes for foreign types
NEW: Function Variable QF to create a method
NEW: Console LineTracker for MTASC Problems(enables ProblemHover)
NEW: Quick-View: Type Dependency (Ctrl-U)
NEW: Texthovers and Declarations in Comments and Strings
NEW: Editor "Mark Occurences"
NEW: "Set Returntype" Quickfix with type-detection
NEW: Search References
NEW: Show variable-initializer in JavaDoc e.g. var a : String = "Hallo";
NEW: TextEdit - Folding actions
NEW: Other Perspectives from Flash Perspective available
NEW: File associaton of AS-Files via Content Types ("ActionScript Source File")
NEW: Ant-View available from Flash Perspective
NEW: Parser Performance optimizations
NEW: Folding of multiple singleline comments
NEW: Autoclosing of blockcomments optional
NEW: ANT Task "fdt.browse" opens external browser
NEW: Editor Links to AS-Language Elements(use Ctrl + Mousehover)
NEW: TODO Marker "//!"
le post du forum de FDT

Bogue sous osX

Avec cette mise à jour j'ai rencontré un problème de gestion des DOM UTF-8 présent dans l'en-tête des fichiers. FDT retournait une erreur du type :

Lexical error at line 1, column 1. Encountered: "\ufeff" (65279), after : ""

En plus de cette erreur, MTASC signalait qu'il n'arrivait pas à parser correctement les classes : Object, Scene, Sound, NetStream, System, TextSnapshot.

Après quelques test et discution avec erixtekila j'ai capté qu'en supriment les BOM de l'en-tête des fichiers le problèmes était résolu (enregistré-sous UTF-8 NOT-BOM).

C'est une méthode pénible, mais qui à le mérite de fonctionner (je viens de le faire sur 200 classes), et pareil pour MTASC, les classe que FDT arrivait pas à parsé était encodé en UTF-8 avec BOM. J'ai fais une version sans BOM pou qui veut. std_not_bom.zip

le post du forum de FDT

Voilà sinon tout le reste à l'air de bien fonctionner, maintenant j'arrive à utliser le SWF Viewer. :)

++ LAurent

samedi, février 11 2006

[FDT] - Raccourcis clavier

Je fais surtout se billet de pour moi, égoïste que je suis, et un peu pour qui veut. ;)

Il manquait d'un endroit où étais rassemblé les raccourci clavier de FDT.

Raccourcis clavier de FDT

F2 		Renommer la classe sélectionnée (ou active).
F3 		Ouvre et montre l'implémentation de la méthode ou la variable sélectionnée.
F4  		Ouvre et montre l'implémentation du type de l'élément sélectionné.
F5  		Ouvre et montre l'implémentation de la super classe.

alt-[ Up || Down] Déplace le la ligne ou la sélection vers le [ haut || bas ].

ctrl-espace	aide contextuelle.

ctrl-1		Quick-Fix, essaye de corriger tout seul les erreurs.
ctrl-7		Commente les lignes sélectionnées (ou actives).
ctrl-shift-F11	Lance le dernier Run (ex. compilation MTASC).

ctrl-D		Supprime la ligne en cours.
ctrl-L		Aller à la ligne
ctrl-O 		Ouvre une «OutLine» par dessus tout.
ctrl-T		Affiche le généalogie de l'élément sélectionné.

ctrl-shift-D	Duplique la ligne.
ctrl-shift-O 	Organise les imports de façon automatique.

Si vous en connaissez d'autres n'hésitez pas à faire tourner, je mettrais à jour la liste. ;)

C'est quoi FDT ?

mercredi, février 1 2006

[FDT] - template, MTASC Singleton

Suite à une discution suivit sur la ML de MTASC.

J'ai pondu un template FDT pour créer un Singleton sur la classe d'entrée de MTASC :

class Application 
{
	private static var _instance : Application;
	private static var __root : MovieClip;
	
	private function Application (mc:MovieClip)
	{
		__root = mc;
	};
	
	/**
	 * @return singleton instance of Application
	 */
	public static function main( mc:MovieClip ) : Application
	{
		if ( _instance == undefined )
		{
			_instance = new Application(mc);
		}
		return _instance;
	}
 
}

Pour la charger : MTASC_Singleton.xml

Après discution avec François dit le fonk, voilà ce qui en est sortit :

class Test extends MovieClip
{
	private static var __scope__ : MovieClip;
	private static var __inst : Test;
	
	private function Test()
	{
		super();
	}
	
	/**
	 * @return singleton instance of Test
	 */
	public static function getInstance( Void ) : Test
	{
		if( __inst == undefined)
		{
			__inst = Test( __scope__ );
			__scope__.__proto__ = Test.prototype;
			__scope__.constructor = Test;
			__scope__.constructor.call( __scope__ );
		}
		return __inst;
	}
	private static function main( scope:MovieClip ) : Void
	{
		__scope__ = scope;
		var app = Test.getInstance();
	}
}

Pour la charger : MTASC_Single_MovieClip_inherit.xml

A vous de choisir. ;)

- page 11 de 13 -