6 raisons d’utiliser Actionscript 3 par Lee Brimelow
20 août 2008 – 8:19Parfois 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.
Recherche et développement : Actionscript, Air, Adobe, Flex, Flash, Papervision/Away 3D, RIA
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.
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.)
Adobe Flash Player 10 beta 2 est disponible sur le labs avec quelques nouveautés
Ce qu'on retient :
Ceci vient s'ajouter à tout cela
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.
Adobe Flash Player 10 disponible en version beta sur le labs.
Ce qu'on retient :
Voilà d'excellentes nouvelles, je suis impatient !
Agence : beestudio
Erreur (en ouvrant une page web, ma fenêtre a redimensionné) :
TypeError: Error #1009: Cannot access a property or method of a null object reference.
at project.main.Preview::Preview/_stageResize()
Agence : tha ltd
Erreur (lorsque qu'on tente de créer une boucle en mode "play") :
TypeError: Error #1034: Type Coercion failed: cannot convert net.soohei.events::CustomEvent@13e54bd9 to flash.events.NetStatusEvent.
at flash.events::EventDispatcher/dispatchEventFunction()
at flash.events::EventDispatcher/dispatchEvent()
at net.soohei.util::VideoPlayer/statusHandler()
Agence : Olgivy Interactive Singapore
Erreur (lorsqu'on ferme le navigateur) :
Error #2044: Unhandled IOErrorEvent:. text=Error #2036: Load Never Completed.
Flash 9 et l'actionscript 3 sont omniprésent sur internet, la majorité des nouveaux sites sont en AS 3 et ces derniers ne sont malheureusement pas soumis à un contrôle de qualité suffisant !
Il suffit de visiter quelques sites référencé sur The FWA avec le flash player debug pour se rendre compte qu'il reste des erreurs sur la plupart d'entre-eux. Pourtant ces sites sont développés par des agences professionnels et vendu à des clients comme produit fini !
C'est pourquoi j'ai décidé de créer une nouvelle catégorie : "Debug !" dans laquelle je posterai des sites qui n'ont pas été testé et/ou débuggé suffisamment avant leur passage en production. Une façon simple de peut-être faire réagir les développeurs.
Pour la réalisation d'un cd-rom en Flash j'avais besoin de passer en plein-écran, ce qui se fait très facilement via fscommand. Cependant je viens de découvrir la méthode displayState de la classe Stage qui permet de choisir entre un état "NORMAL" ou "FULL_SCREEN" pour le flash player.
fscommand("fullscreen", "true");
Au début j'ai pensé que c'était pareil, rien de spécial, mais j'ai vite remarqué qu'il y a un détail subtile qui me fait dire que vous pouvez dire adieu à fscommand pour faire du plein-écran. Avec fscommand, lorsque vous exécutez votre swf, vous verrez que pendant une fraction de seconde le flash est ouvert à sa taille "normal" puis qu'il passe en "fullscreen". Ce qui a pour conséquence que souvent on attribue un écouteur à la scène pour afficher le contenu une fois que le player est passé en plein-écran. Mais si vous utilisez stage.displayState le mode plein écran est instantané à l'exécution du swf. Si vous tracez directement le stage.stageWidth et stage.stageHeight ça renverra la taille de l'écran.
stage.align = StageAlign.TOP_LEFT; stage.displayState = StageDisplayState.FULL_SCREEN; stage.scaleMode = StageScaleMode.NO_SCALE; var output:TextField = new TextField(); output.text = stage.stageWidth+" * "+stage.stageHeight; addChild(output);
Vous pouvez copier l'exemple ci-dessus d'un fla vide et tester le swf pour voir le résultat.
Dans le même genre il y a aussi :
ATTENTION que les deux derniers points ne sont disponible qu'à partir de la troisième mise à jour du flashplayer 9
Conclusion, si vous désirez passer en plein-écran, pensez à StageDisplayStage.FULL_SCREEN et oubliez fscommand.