28 août 2004
Enfin GLIC
Une annonce tant attendue
Ca se passe ici
27 août 2004
Voila c'est fait.
Comme je vous l'avais indiqué précédemment sur les MultiDelegate je viens de mettre en place un algorithme linéaire pour le stockage efficace des delegates.
Voici le fichier delegate.as mis à jour :
private var target;
private var method:Function;
function get Previous():Delegate {
return _prev;
}
while(delegate1 != null) {
if(delegate1 == d2) {
delegate1 = null;
return d1;
}
delegate1 = delegate1._prev;
method = f;
while(d1._prev != null) {
d1 = d1._prev;
}
d1._prev = d;
return d1;
while(d1 != null) {
d1.method(obj,e);
d1 = d1._prev;
}
23 août 2004
Ces petits moments ou...
on se sent bien, un bout ?
MultiDelegate
Voici ma version de la classe Delegate, celle avec laquelle vous pouvez faire du mulitdelegate.
Avec un exemple qui permet de comprendre son utilisation:
if(lst[i] == d2.list[0])
delete lst[i];
}
ca se passe ici pour l'exemple.
Ceci dit, je suis en passe de mettre en place un algorithme linéaire de stockage de délégués à la place d'un tableau de fonctions.
Petite correction...
Lors de la précédente publication, je vous ai parlé de la gestion des évènements et des délégés dans it.system mais j'ai oublié de vous préciser que dans le code suivant, la partie mis en vert :
est du type Object. Ce qui vous permet de passer n'importe quelle structure de type Object à votre gestionnaire d'évènement.
21 août 2004
Les évènements et les délégués dans it.system
Dans it.system, tous les composants utilisent une classe qui fournit une liste simple de délégués.
La classe de base it.system.FControl fournit une structure de données efficace (à l'aide de la propriété Events) pour le stockage et l'extraction de délégués d'événements.La propriété Events est structure de données du type it.system.EventList qui est conçue pour un stockage et une extraction efficaces des délégués d'événements.
La classe suivante (qui d'ailleurs reprend la classe d'exemple de Colin Mook : la classe Box) montre cette structure,
le code implémenté par cette structure est mis en surbrillance et en gras.
private static var EventClick:String = "EventClick";
private static var EventRollOver:String = "EventRollOver";
private static var EventRollOut:String = "EventRollOut";
private var events:EventList;
private var width:Number ;
private var height:Number ;
private var container_mc:MovieClip ;
function Box (x:Number, y:Number,w:Number, h:Number, target:MovieClip, depth:Number ) {
container_mc = target.createEmptyMovieClip("boxcontainer" + depth, depth);
container_mc.onPress = Delegate.create(this ,onClick);
container_mc.onRollOver = Delegate.create(this ,onRollOver);
container_mc.onRollOut = Delegate.create(this ,onRollOut);
container_mc.useHandCursor = false ;
setWidth(w);
setHeight(h);
setX(x);
setY(y);
}
function getWidth ():Number {
return width;
}
function setWidth (w:Number ) {
width = w;
draw();
}
function getHeight ():Number { return height; }
function setHeight (h:Number ) {
height = h;
draw();
}
function getX ():Number { return container_mc._x ; }
function setX (x:Number) { container_mc._x = x; }
function getY ():Number { return container_mc._y ; }
function setY (y:Number) { container_mc._y = y; }
function get Events():EventList {
if(events == null )
events = new EventList();
return events;
}
function addClick(value:Delegate) {
Events.addHandler(Carre.EventClick,value);
}
function addRollOver(value:Delegate) {
Events.addHandler(Carre.EventRollOver,value);
}
function addRollOut(value:Delegate) {
Events.addHandler(Carre.EventRollOut,value);
}
function onRollOver() {
var handler = events.getEntry(Carre.EventRollOver);
if(handler != null )
handler.invoke(this,"rollOver");
}
function onRollOut() {
var handler = events.getEntry(Carre.EventRollOut);
if(handler != null )
handler.invoke(this,"rollOut");
}
function onClick() {
var handler = events.getEntry(Carre.EventClick);
if(handler != null )
handler.invoke(this,"click");
}
function draw () {
container_mc.clear ();
container_mc.lineStyle (1, 0x000000);
container_mc.moveTo (0, 0);
container_mc.beginFill (0xFFCC33, 100);
container_mc.lineTo (width, 0);
container_mc.lineTo (width, height);
container_mc.lineTo (0, height);
container_mc.lineTo (0, 0);
container_mc.endFill ();
}
}
Des explications s'imposent :
private static var EventClick:String = "EventClick";
...
Variable statique qui définit la clé pour le stockage de(s) délégé(s).
function addClick(value:Delegate) {
Events.addHandler(Box.EventClick,value);
}
function onClick() {
var handler = events.getEntry(Box.EventClick);
if(handler != null)
handler.invoke(this,"click");
}
...
La première fonction permet l'enregistrement du délégué à la liste des délégués pour l'évènement Click.
La seconde permet l'appel au délégué enregistré avec l'évènement Click
Maintenant que les explications sont faites. Voici un exemple concret:
result2.text = "coucou";
}
function doOtherIt() {
result3.text = "un autre coucou";
}
function doOtherOtherIt() {
result1.text = "hehe !!!";
}
function clear() {
result1.text = "";
result2.text = "";
result3.text = "";
}
var myBox = new Box(10,10,100,100,_root,0);
myBox.addClick(new Delegate(doOtherIt));
myBox.addClick(new Delegate(doIt));
myBox.addRollOver(new Delegate(doOtherOtherIt));
myBox.addRollOut(new Delegate(clear));
On définit des gestionnaires d'événements.
On instancie la classe Box.
On connecte le gestionnaire d'événements à Box, en créant un délégué qui contient une référence à doIt dans son argument et ajouter cette instance déléguée à l'événement Click.
Un apercu (en live) : survolez le carre et cliquez dessus
18 août 2004
3D
Un peu de 3D cela ne fait pas de mal.
Quand j'ai le temps, je m'amuse à faire des moteurs 3D en flash et en voici un qui est léger et rapide mais assez complexe je l'avoue.
Je pense que des explications s'imposent...mais pas pour le moment, dans un prochain ticket peut-être :)
Pour faire tourner le cube utiliser les fleches de votre clavier et pour faire avancer et reculer le cube les touches haut et bas de page.
Poids du swf environ 3Ko.
fichier source, ca se passe ici.
Dictionary
Voici une petite classe qui permet de stocker une collection de paires valeur-clé.
Ces paires sont organisées comme membre de la classe.
function Dictionary() {}
function addEntry(key:String,data:Object) {
this[key] = data;
}
function remove(key:String) {
delete this[key];
}
function clear() {
for(var i in this)
delete this[i];
}
function contains(value:Object):Boolean {
for(var i in this) {
if(this[i] == value)
return true;
}
return false;
}
function getEntry(key:String):Object {
if(contains(this[key]))
return this[key];
return null;
}
}
14 août 2004
MXI
Voici un outil indispensable MXI File Creator. Cet outil vous permet tel que son nom l'indique de créer des fichiers MXI
ca se passe ici
13 août 2004
Logo it.system
Je travaille actuellement sur le logo du framework it.system, en voici un aperçu. Je serais ravi de connaitre vos opinions .