Adobe Flash CS4

23 septembre 2008 – 14:18

Impatient j'ai regardé ce matin le lancement de la Creative Suite 4 d'Adobe. Comme d'habitude je suis resté sur ma faim, personnellement ça m'a vraiment énervé d'attendre une heure pour ne rien voir d'intéressant qu'un show commercial dans lequel on peut compter le nombre de fois où le présentateur dit :

"et vous avez fait ça avec la Creative Suite 4 ?"
"oui tout à fait, d'ailleurs ça aurait été impossible à réaliser sans la Creative Suite 4 d'Adobe"
"donc vous continuez à utiliser la Creative Suite 4 d'Adobe"
"oui bien sûr, d'ailleurs nous allons devoir en (la Creative Suite 4 d'Adobe) acheter pour toute notre équipe, sans quoi nous ferons des jaloux..."

Ok, peut-être que j'exagère un peu, mais si on tient compte que la majorité du public qui va regarder le lancement de ce produit est constitué de professionnels du milieu ont se demande à quoi perdre son temps à essayer de nous vendre un produit qu'on a déjà adopté !

Heureusement, il y a quelques chanceux qui ont reçu une version beta de Flash CS4, comme Keith Peters qui n'hésite pas à partager sur son blog ses découvertes. Quelques screenshots de la nouvelle interface.

Les designers, animateurs, illustrateurs, devraient être assez satisfait de cette nouvelle version de Flash CS4 et j'ai hâte de tester l'axe Z dans l'IDE.

Pour finir, je dirais que la seule chose à retenir aujourd'hui c'est que Flash CS 4 sera normalement disponible courant du mois d'octobre.

[AS3] stage.stageWidth & stage.width

22 septembre 2008 – 12:34

En chargeant un swf externe (640x480) dans un swf principal (900x600) je me suis rendu compte qu'il m'était impossible de connaître la taille du stage du swf loadé. "stage" est unique et représente le stage du root. Tandis que le swf loadé devient un enfant dans la displayList, je peux accéder à sa taille avec la propriété width.

Par contre, si dans mon swf loadé, j'utilise quelque part dans le code "stage.width" ou "stage.stageWidth" ils ne seront plus correcte une fois loadé dans le swf principal. Ce qui fait bien chier...

stage.stageWidth : renvoi la taille de la scène par défaut (spécifié dans le panneau des propriétés)
stage.width : renvoi la taille total objet qui se trouve sur la scène, donc si rien n'est sur la scène ce sera 0

Alors soit je passe à côté de quelque chose, soit le seul moyen de connaître la taille de la scène dans un swf loadé est de la spécifier en dur dans le code, ou de créer un movieclip pour ça sur la scène....

Conclusion en attente d'une solution valable : Ne pas utiliser stage.stageWidth ou stage.width dans un swf qui va être loadé étant donné que ces valeurs reflèteront la scène principale, sauf si c'est le but recherché évidemment.

[3D] Away3D et positionnement au pixel près

9 septembre 2008 – 8:47

Dernièrement je cherchais le moyen de travailler au pixel près avec Away3D, c'est à dire que lorsque je crée une plane de 300px sur 200px par exemple, que ce soit réellement 300px sur 200px à l'écran lorsqu'elle est de face.

J'ai trouvé la solution via un article sur everydayflash.

La solution est de positionner l'objet désiré en z grâce à la formule magique suivante :


3dobj.z = ((camera.zoom - 1) * camera.focus) - Math.abs(camera.z)



Et ça fonctionne parfaitement, la taille de l'objet à l'écran (2D) est égale à la taille de l'objet dans l'environnement 3D.

Pratique !

[DEBUG!] Europe Nokia Musicalmighty

27 août 2008 – 8:01

http://europe.nokia.com/musicalmighty

Agence : Wieden + Kennedy London, Firstborn

Erreur (apparaît de manière aléatoire lorsqu'on tente de brancher un câble sur un produit) :

TypeError: Error #1009: Cannot access a property or method of a null object reference.
at utils::NoiseUtilities$/play()
at elements::Central/wireNearedHandler()
at flash.events::EventDispatcher/dispatchEventFunction()
at flash.events::EventDispatcher/dispatchEvent()
at elements::Wire/checkPlug()
at elements::Wire/firstDotMovedHandler()
at flash.events::EventDispatcher/dispatchEventFunction()
at flash.events::EventDispatcher/dispatchEvent()
at elements::Dot/stageMouseMoveHandler()

Vraiment dommage qu'un site graphiquement intéressant et vraiment bien réalisé comme celui-ci laisse traîner des erreurs qui pourraient être facilement découverte lors d'une phase de test et ainsi corrigé avant la production.

[3D] Away3D une première approche

25 août 2008 – 16:17

Dernièrement je me suis intéressé plus sérieusement à Away3D, un moteur 3D pour Flash en ActionScript 3 dérivé du très connu Papervision3D. Ce sont des problèmes (gestion des profondeurs) lors d'un projet développé avec ce dernier qui m'ont poussé à regarder vers une alternative.

Au début j'ai été assez dérouté par les différences entre les deux moteurs, je m'attendais à pouvoir copier-coller le code que j'avais écrit pour Papervision3D avec juste quelques changements dans le nom des packages et des classes... mais ça n'a pas été si simple et c'est pourquoi je me suis dit qu'il serait intéressant que je garde une trace de cette première approche d'Away3D, ça servira peut-être à quelqu'un...

Parfait pour débuter :

Away3D est beaucoup plus simple à mettre en place que Papervision3D et je pense que c'est à tort que l'on conseille souvent aux débutants de commencer avec ce dernier. La seule raison vraiment valable étant la quantité d'articles que l'on trouve sur internet comparé à Away3D qui ne dispose pas de beaucoup d'exemples, mais on va y remédier.

Ci-dessous un exemple inspiré d'un article très complet sur Flash Magazine. Je considère que vous avez téléchargé les librairies Away3D.

package
{
	import away3d.containers.View3D;
	import away3d.primitives.Sphere;
	import flash.display.MovieClip;
	public class Main3D extends MovieClip
	{
		public function Main3D()
		{
			var view:View3D = new View3D();
 
			// position la view au centre de la scène
        		view.x = stage.stageWidth * .5;
			view.y = stage.stageHeight * .5;
			addChild(view);
 
			// on crée une sphère
			var sphere:Sphere = new Sphere();
        		view.scene.addChild(sphere);
 
			// on fait un rendu 3D
			view.render();
		}
	}
}

Vous n'avez plus qu'a lier cette classe à votre fla (document class) et compiler pour voir une sphère.
Ceux qui viennent de Papervision3D auront certainement remarqué que je n'ai pas déclaré de caméra, de texture pour la sphère ni même de scène. En fait Away3D possède des valeurs par défaut pour toutes les fonctions. En déclarant ma "view" je possède déjà une "camera" et une "scene". Par contre il y a des petits détails qui diffèrent entre les deux moteurs 3D. Par exemple la caméra par défaut de Papervision3D se trouve en x:0 y:0 z:-1000 mais celle d'Away3D est dans l'autre sens x:0 y:0 z:1000, quand on ne le sait pas on se demande pourquoi la sphère va sur la gauche lorsqu'on augmente la position en x.

Voilà, je fais court, c'est vraiment une première approche pour montrer à quel point Away3D est simple à mettre en place. J'essayerai de mettre de continuer à mettre des exemples à l'avenir.

inspiré de l'article écrit par Jens C Brynildsen sur Flash Magazine.

6 raisons d’utiliser Actionscript 3 par Lee Brimelow

20 août 2008 – 8:19

Parfois c'est nécessaire d'avoir quelques arguments en réserve pour convaincre un client ou un supérieur qu'il vaut mieux travailler avec la dernière version de flash.

Six reasons to use ActionScript 3.0

Actionscript & ECMA Script, le divorce forcé…

18 août 2008 – 13:33

Cela fait deux jours que je parcours un peu tous les blogs que je connais à propos de l'annonce d' ECMA International de laisser tomber la version 4 d'ECMA Script (ES4) pour se concentrer sur la prochaine version d' ECMA Script 3.1 (ES3.1), j'en profite pour faire un petit résumé et donner mon avis sur les conséquences de cette décision.

Histoire d'un peu mettre tout le monde dans le contexte, ECMA est une organisation internationale qui s'occupe de définir des standards dans le domaine de l'information et de la communication. Ecma Script est un langage de script standardisé par ECMA International et utilisé de diverses manières sur internet. On en a tous entendu parler sous le nom de Javascript et plus particulièrement Actionscript pour les flash/flex développeurs.

En effet, Adobe a pris le temps de faire d'actionscript est langage conforme au standard Ecma Script. Pour être plus précis, actionscript 3 a toujours été présenté comme une implémentation du futur ES 4. Cependant Adobe a utilisé une version brouillon de ES 4; en d'autres mots, actionscript 3 est conforme à un standard qui n'a pas encore été validé comme tel et qui sans doute ne le sera pas avant longtemps. Le problème étant que le comité chargé de valider ces propositions a décidé de laisser tomber Ecma Script 4 en faveur d'Ecma Script 3.1. qu'on appelle aussi Ecma Script Harmony...

Depuis un moment le développement d'Ecma Script était scindé en deux groupes. Google, Adobe, Mozilla et Opera se focalisaient sur ES 4 alors que Microsoft et Yahoo préféraient évoluer vers un Ecma Script 3.1 moins ambitieux. La raison officielle de cet abandon serait que certains changements dans ES 3.1 allaient poser problème à la version ES 4. (oooh...) Mais de ce que j'ai pu lire, il me semble plus probable que la vrai raison soit encore une fois une question d'argent surtout pour Microsoft.

Adobe a misé beaucoup sur Ecma Script 4, les plateformes Flash et Flex utilisent actionscript 3 et ce n'est pas sans raison si Adobe a fait cadeau du projet Tamarin à Mozilla, en leur donnant le moyen de rapidement implémanter le support d'ES 4. Et il ne le cache pas :

The goal of the "Tamarin" project is to implement a high-performance, open source implementation of the ECMAScript 4th edition (ES4) language specification.

Cette démarche n'est pas dénuée de sens, faire évoluer Ecma Script demande que les navigateurs puissent supporter la nouvelle version du langage, cela prend du temps et donc de l'argent.

Adobe donne un coup de pouce car il a tout à y gagner. Ce qui n'est pas le cas de Microsoft qui va devoir développer une nouvelle version de son navigateur Internet Explorer s'il veut respecter le futur standard. Ce dernier a d'ailleurs déclaré qu'il ne ferait pas les frais de ce développement... ce qui veut dire que lorsqu'on s'appelle Microsoft et qu'on a un navigateur qui domine largement parmis les autres sur internet on peut se permettre de décider des standards, parce qu'il est évident que si IE ne supporte pas Ecma Script 4 peu sont les développeurs qui franchiront le pas.

Il suffit de voir la position de Microsoft à propos des futurs changements dans Ecma Script 4.


Et comme le dit très bien Hank Williams sur son blog :

Adobe and Microsoft are bitter rivals, and the last thing Microsoft would be willing to accept is wide-spread adoption of a language that is strategically critical to a competitor.

Finalement actionscript 3 n'est donc pas conforme au futur Ecma Script 3.1 puisque ce dernier n'a pas intégré tous les changements d'Ecma Script 4.

Allons-nous devoir faire marche arrière pour rester conforme ?
Retirer les "namespaces", " package" etc.
Bien entendu non, heureusement, Adobe a déjà répondu à cette interrogation.

Conclusion, l'innovation est bien souvent sabotée de l'intérieur, les standards prennent du temps à être mis en place, mais Adobe n'aura pas le temps d'attendre, Actionscript est devenu un langage propriétaire par la force des choses.

Reste à voir comment Adobe va tirer son épingle du jeu maintenant qu'il se retrouve seul avec une technologie sur laquelle il a misé ses derniers projets (Flash, Flex, Air, Tamarin, Thermo, etc.)

Flash Player 10 beta 2 - unloadAndStop et clavier en plein écran

3 juillet 2008 – 10:36

Adobe Flash Player 10 beta 2 est disponible sur le labs avec quelques nouveautés

Ce qu'on retient :

  • unloadAndStop, qui est l'équivalent de la fonction unload en actionscript 2. En résumé , lorsqu'on exécute unloadAndStop le contenu chargé est immédiatement supprimé et mis à disponibilité du "garbage collector" de flash en arrêtant tous les processus sonore, supprimant les "eventsListeners" actifs et tout autres références actionscript. Cela devrait alléger nos méthodes maison genre "kill" ou "destroy".
  • En mode plein écran vous pourrez avoir accès aux touches du clavier (space,tab,arrows,shift) de manière à pouvoir contrôler les applications flash en plein écran.

Ceci vient s'ajouter à tout cela

[AS3] Opération mathématique de base avec un nombre décimal

19 juin 2008 – 23:17

J'ai fait une petite découverte assez stupéfiante en faisant la somme de nombres décimaux en actionscript 3. L'exemple ci-dessous représente bien le problème :

Recopier le code suivant dans un fla vide et compilez !

var myNumber:Number = 0;
for(var i:Number = 0; i<10; i++){
	myNumber += 0.1;
	trace(myNumber);
}

En fenêtre de sortie vous aurez le résultat suivant :

0.1
0.2
0.30000000000000004
0.4
0.5
0.6
0.7
0.7999999999999999
0.8999999999999999
0.9999999999999999

Par contre si vous recompilez le même fichier en actionscript 2, tout rentre dans l'ordre...

Après quelques recherches j’ai été encore plus surpris par la réponse d’adobe :

This is a fact of life in applications that use floating point arithmetic

Autrement dit : "C'est pas un bug alors démerde toi..."

Conclusion je trouve ça énorme que des problèmes de ce genre surviennent en actionscript 3 alors que tout allait bien actionscript 2. En attendant je me contente de faire passer tous mes nombres par une méthode qui corrige l'erreur...

var myNumber:Number = 0;
for(var i:Number = 0; i<10; i++){
	myNumber += 0.1;
	myNumber = correctIt(myNumber);
	trace(myNumber);
}
 
function correctIt(value:Number){
	return Math.round(value*100)/100;
}

Résultat :

0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
1

C'est pas très esthétique je sais mais je suis ouvert aux autres solutions, n'hésitez pas.

Un thread à ce sujet sur le forum de Kirupa.

Flash Player 10 - nom de code “Astro”

15 mai 2008 – 10:47

Adobe Flash Player 10 disponible en version beta sur le labs.

Ce qu'on retient :

  • Adobe Pixel Bender, pour la création de filtres et effets, même technologie que celle dans After Effects CS 3.
  • Enfin, la 3D dans Flash de manière native arrive ! Il précise que ce sera léger et rapide... à comparer donc avec les moteurs actuels comme Papervision3D, Sandy et Away3D.
  • Nouveau moteur de texte !!! Je crois que c'est la meilleur nouvelle qu'adobe pouvait faire. Espérons qu'il sera à la hauteur. Le "right to left" est géré.
  • Amélioration de l'API de dessin avec de nouvelles méthodes 3D.
  • Nouveau système de gestion des couleurs pour permettre à un swf d'avoir un profil couleur standard (sRGB).
  • Utilisation de la carte graphique pour accélérer les calculs sur les bitmaps, filtres etc. Si la carte graphique du client n'est pas suffisante, flash player repasse en mode "software rendering".
  • Amélioration du moteur d'anti-aliasing.
  • Nouveau type de donné : Vector.
  • Changement automatique du bitrate lors d'un streaming vidéo, selon les conditions de la bande passante.
  • Amélioration de FileReference, on peut traiter directement ce qu'on charge depuis le client sans passer par le serveur, en utilisant une API.
  • Génération de son dynamique (créer du contenu audio).
  • Amélioration du support de bitmap 4096px sur 4096px, 16.777.216 pixels au total. (c'est basé sur la surface donc on peut avoir un côté de 8191 pixels).
  • Plus de contrôles dans la gestion du menu contextuel. Accès au presse papier.
  • Gestion du dernier set de caractère chinois.
  • Ubuntu OS Support for Flash Player 10

Voilà d'excellentes nouvelles, je suis impatient !