Adobe a utilisé de joli rubans roses pour emballer les cadeaux qui nous arrivent aujourd’hui : les beta 3 de Flex 3 et de AIR !
Pas de différences majeures entre la beta 2 et la beta 3 pour Flex 3, si ce n’est l’arrivée de la compatibilité avec BlazeDS. En ce qui me concerne, j’ai décidément beaucoup de mal avec ces trucs de remoting génériques. Rien ne vaut un bon vieux serveur socket codé pour l’occasion !
Quant à AIR Beta 3, je n’ai pas réussit à mettre la main sur un changelog par rapport à la Beta 2.
Téléchargements :
Parfois, avec Flash, il faut savoir réinventer la roue. Par exemple, lorsque l’on veut coder un moteur d’animation qui s’intègre au sein d’un système de rendu isométrique complexe, on aimerait à la foi pouvoir disposer d’un framerate le plus élevé possible, tout en jouant les animations au framerate dans lequel elles ont été réalisées.
Pour se faire, il faut obligatoirement passer par l’indispensable case du calcul du framerate en cours. Il existe peut-être des mondes merveilleux ou la valeur que l’on a entrée dans le champ « Nombre d’images par secondes » de l’IDE Flash est tout le temps vraie, mais il ne s’agit pas du notre.
Voyons différentes approches pour calculer un framerate.
Un petit crash du player 9 !
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
| package net.tynambule.exp {
import flash.display.MovieClip;
import flash.display.LoaderInfo;
import flash.display.Sprite;
import flash.net.URLRequest;
import flash.events.Event;
import flash.display.Loader;
[SWF(backgroundColor="#ffffff", frameRate="250", width="100", height="100")]
public class MovieClipSpriteTest extends Sprite
{
public function MovieClipSpriteTest()
{
var l : Loader = new Loader();
l.contentLoaderInfo.addEventListener(Event.INIT, onLoadInit);
// Un SWF Flash 9/AS3 avec "Document class" défini à "MobileSprite"
l.load(new URLRequest("swfexterne.swf"));
}
private function onLoadInit(e : Event) : void
{
var MobileSprite : Class = (e.target as LoaderInfo).applicationDomain.getDefinition("MobileSprite") as Class;
var instance : MovieClip = new MobileSprite() as MovieClip; // KA-BOOM
this.addChild(instance);
}
}
} |
Ce code fonctionne très bien si l’on utilise l’option « Linkage » d’un clip dans la bibliothèque, mais crash lamentablement si on place directement nos éléments sur la scène et que l’on défini une « Document class ». À noter que c’est l’instanciation de la classe récupérée qui foire, et non pas sa récuperation. Si l’on fait un describeType
sur MobileSprite
dans le code ci-dessus avant de créer l’instance, le retour est normal, il s’agit bien d’une classe qui étend bien MovieClip
.
C’est pô bô. Allez, salut.
Le blog est désormais plus large.
Ouais, à force, le format « timbre poste » en largeur, c’était pas forcément nécessaire. Ça augmente un peu la lisibilité du tout, il me reste un truc à faire au sujet des listings qui sont encore pas top à la lecture.
Allez, salut !
EDIT : Et en plus, maintenant, j’ai remplacé l’ancien highlighter par un nouveau, celui d’Alex Gorbatchev que l’on trouve ici : http://code.google.com/p/syntaxhighlighter/
Tout est en JS, et c’est vachement puissant.
Astro, le nom de code du prochain player Flash (le dixième), ne cesse de se découvrir. On en est désormais certains, l’AS3 restera en vigueur pour cette release. L’AS4 reste à l’horizon, mais lointain. En revanche, certains ajouts sont faits à la structure du langage pour se conformer au standard ECMA-232 Rev 4, et entre nous, ça dépote.
Les tableaux typés
1
2
3
4
5
| // Crée un tableau où tous les éléments doivent être de type String
var typedArray:[String] = new [String]("Pomme", "Poire", "Banane");
// Alternative en variable anonyme :
["Pomme", "Poire", "Banane]:[String]; |
Les génériques typés
1
2
3
4
5
6
7
8
9
10
11
| // Crée un objet générique avec trois propriétés typées
{x:100, y:150, z:50}:{x:Number, y:Number, z:Number};
// Défini un type d'objet générique type
Point3D = {x:Number, y:Number, z:Number};
// Et hop, on utilise ce type générique
var myPoint:Point3D = new Point3D();
myPoint.x = 100;
myPoint.y = 150;
myPoint.z = 50; |
L’opérateur ‘like’
1
2
3
4
5
| // Retourne vrai, car ces deux objets ont des propriétés communes (x, y), ainsi que d'autres points communs
trace(instanceOfSprite like instanceOfMovieClip);
// Retourne également vrai, même si les deux classes n'ont aucun parent commun !
trace(instanceOfSprite like instanceOfPoint); |
Les types mixtes
1
2
3
4
5
6
7
| // Définition d'un type acceptant à la foi les valeurs de types Number et String
type MixedType = (Number, String);
// Petit test :
var mt1:MixedType = "Pomme"; // Fonctionne correctement
var mt2:MixedType = 12; // Fonctionne également
var mt3:MixedType = {x: 12, y: 15}; // Erreur de compilation, ni Number ni String ! |
Espérons que tout ceci rentre dans le planning d’Adobe pour Astro, sans quoi il va falloir être très patient pour l’AS4… Allez, salut !
Commentaires récents