P3 A new story begins

Aller au contenu | Aller au menu | Aller à la recherche

jeudi 1 octobre 2009

Astuce AS3 - CheckBox non éditable

Je me suis longtemps posé une question toute bête...

Commet écrire un renderer avec une case à cocher (checkbox) non éditable !!!

En effet la propriété toggle est inaccessible depuis la clmasse mx.controls.Checkbox.

Et bien il suffit tout simplement de surcharge les gestionnaire de click et de luis dire de ne plus rien faire

Et voila!!! On a une checkbox totalement passive, je vous rassure on peut tout de même modifier sa valeur programatiquement. (c'est automatique via le renderer)

  1. public class BooleanRenderer extends CheckBox
  2. {
  3. public function BooleanRenderer()
  4. {
  5. super();
  6. this.setStyle("textAlign", TextFormatAlign.CENTER);
  7. }
  8.  
  9. override protected function clickHandler(event:MouseEvent):void
  10. {
  11. event.stopImmediatePropagation();
  12. return;
  13. }
  14. }
  15.  
  16. //Utilisation en tant que renderer.
  17.  
  18. <mx:Component id="booleanRenderer">
  19. <renderer:BooleanRenderer />
  20. </mx:Component>

dimanche 7 décembre 2008

Preloader ActionScript 3.0

Je suis en train de réécrire le code ActionScript 3.0 d'un petit player MP3 en flash (swf).

Vous pouvez voir le player sur mon site de musique (en travaux)

Aujourd'hui je vais vous donner le code du preloader en ActionScript 3.0 :

Sur la première frame de votre scénario, créez un calque que vous nommerez Actions et ne mettez rien dessus. Puis ouvrez le panneau Action (touche F9), et copiez-collez le code ci dessous....

  1. //Play the wait animated icon
  2. wait_mc.play();
  3.  
  4. //Listen the progress Event
  5. this.loaderInfo.addEventListener(ProgressEvent.PROGRESS , onLoadProgress);
  6.  
  7. //Listen the end of progress
  8. this.loaderInfo.addEventListener(Event.COMPLETE, onLoadComplete);
  9.  
  10. /**
  11.  * Update the progress bar.
  12.  */
  13. function onLoadProgress(event:ProgressEvent):void
  14. {
  15. var bl:int = event.bytesLoaded;
  16. var bt:int = event.bytesTotal;
  17. var amountLoaded:int = Math.floor((bl / bt)*100);
  18.  
  19. trace(amountLoaded * 2);
  20. progressWaitBar_mc.width = amountLoaded * 2;
  21. trace(amountLoaded);
  22. chargement.text = Math.round(amountLoaded ) + "%";
  23.  
  24. }
  25.  
  26. /**
  27.  * Download achieved, display the MixTape MP3 Player
  28.  */
  29. function onLoadComplete(event:Event):void
  30. {
  31. trace("Download Complete ! ");
  32. gotoAndStop(2);
  33. }
  34.  
  35. //Manage cache-control for new web browser
  36.  
  37. //Listen the EnterFrame event, if we enter into the first frame and the swf is totally downloaded
  38. stage.addEventListener(Event.ENTER_FRAME, checkComplete);
  39.  
  40. /**
  41.  * Display the MixTape MP3 Player if the swf file was retrieved from cache.
  42.  */
  43. function checkComplete(event:Event):void {
  44. //File was entirely downloaded
  45. if ( LoaderInfo(this.root.loaderInfo).bytesLoaded == LoaderInfo(this.root.loaderInfo).bytesTotal ) {
  46. //Stop to listen
  47. stage.removeEventListener(Event.ENTER_FRAME, checkComplete);
  48.  
  49. trace("Cache Complete ! ");
  50. gotoAndStop(2);
  51. }
  52. }
  53.  
  54. //Don't go to the next frame until I decide !
  55. stop();

Si vous faites Ctrl+Entrée pour tester l'animation cela plantera car :

  • vous n'avez pas le movie clip wait_mc (c'est une animation d'attente)
  • vous n'avez le movie clip progressWaitBar_mc (c'est juste un rectangle avec un masque pour simulez une barre de progression)
  • vous n'avez pas le textfield chargement (ou on fait avancer le pourcentage)
  • vous n'avez pas de frame 2 (c'est là que vous mettrez votre animation)

En espérant vous avoir aidé, n'hésitez pas à demander de l'aide !!!