Archief voor de 'ActionScript' Categorie

BabelFX localisatie framework

Zo nu en dan verzoeken om projecten meertalig te maken. Dit is altijd mogelijk maar kost ook meer werk aangezien je alle elementen in je project dynamisch moet maken en bij een switch van taal moet kunnen updaten met de nieuwe vertaling.

BabelFx is een framework dat deze ‘hazzle’ op zich neemt en je het meeste werk uit handen neemt. Je kan er de volgende elementen mee vertalen.

  • Tekst
  • Afbeeldingen, CSS, url’s
  • Skins
  • Stylesheets
  • Layout veranderingen
  • Branding

Het kan gebruikt worden met Swiz, Mate, Cairngorm, Parsley, RobotLegs & PureMVC of gewoon zonder een framework. BabelFx draait onafhankelijk en transparant achter de schermen. Je schermen hoeven niet meer zelf gelokaliseerde content op te halen.
BabelFx gebruikt het Inversion-of-Control (IoC) patroon om gelokaliseerde content te injecteren in je schermen. Omdat BabelFx content ‘pushed’ hoeven je UI controls, componenten en views niet meer zelf de content op halen.
Je kan vertalingen op de volgende manieren gebruiken:

  • Embedden in je project
  • Laden uit gecompileerde, externe bundels
  • Laden vanuit een remote web service
  • Laden vanuit remote xml bestanden
  • Laden vanuit je remote cms

Flex only?
Ja op dit moment alleen nog voor Flex. Wil je het framework gebruiken in ActionScript projecten dan zul je een eigen LocatizationMap moeten schrijven. BabelFX is namelijk bedoeld om gebruikt te worden via een LocatizationMap mxml class en mxml kun je niet compileren in Actionscript projecten. Er word dan ook aanbevolen om een Flex project te gebruiken. (zie forum)

Apple staat alternatieve ontwikkel tools (Flash) weer toe.

4 en een halve maand nadat Apple hun voorwaarden aanpaste zijn ze terug gekomen op het toestaan van niet native code op hun platform (sectie 3.3.1). Hiermee is het weer mogelijk om iPhone, iPad, iPod applicaties te gaan ontwikkelen in bijvoorbeeld ActionScript en deze de compileren voor het iOS van Apple. Zie (Developer aggreement)

Apple besloot in april om geen apps meer toe te staan die niet direct in Objective-C, C, C++, of JavaScript geschreven waren. Hierop besloot Adobe om hun plannen om Flash applicaties voor de iPhone te bouwen, te staken.

Nieuwe tween bibliotheek Actuate

Er is een nieuwe animatie bibliotheek opgedoken in het landschap van animatie bibliotheken zoals TweenLite, GTween, BetweenAS3, etc. Actuate werkt niet veel anders dan bijvoorbeeld TweenLite van greensock maar zou wel sneller zijn. U kunt hier een benchmark bekijken.

Actuate is vrijgegeven onder een GNU licentie.

Smokescreen converteerd Flash naar HTML5/JavaScript

Zoals je waarschijnlijk wel hebt gehoord/gelezen laat Apple geen Flash technologie toe op zijn apparaten zoals de Ipad en Iphone. Dit met als argument dat de technologie slecht presteert, onstabiel is en energie verslindend zou zijn (zie Thoughts on Flash).

Als tegenhanger ziet Apple HTML5 en javascript als goede alternatieven voor Flash. Deze technologieën zijn zeker interessant maar nog niet zo ver als ActionScript 3.0 en Flash 10. Allereerst is HTML5 nog niet gestandariseerd en implementeren de verschillende browsers deze standaard niet allemaal hetzelfde. Canvas wordt bijvoorbeeld niet ondersteund door Microsoft Internet Explorer.
Je kan dus wel zeggen dat volledig overstappen op HTML5/Javascript (nog) niet een oplossing is. In de toekomst misschien wel, zodra HTML5 gestandariseerd is en door alle browsers ondersteund wordt.

Smokescreen
Smokescreen is een Flash-speler die geschreven is in Javascript. Dit opensource project zet swf bestanden om naar HTML5 en Javascript. Hierdoor is de swf ook af te spelen op Apple apparaten.
De Javascript speler is langzamer dan de Flash plug-in. Hierdoor is Smokescreen met name geschikt voor advertentiebanners. Wat op dit moment ondersteund wordt is een deel van de animatiemogelijkheden uit flash 8, geluidsstreamen, geluidseffecten, wat input en basale ActionScript. Het is nog in ontwikkeling. In de toekomst moet Flash uitgebreider ondersteund worden en de prestaties omhoog zijn gegaan.
Op de site laten ze een aantal demo’s zien waarin je kan zien dat ze aardig op weg zijn.


Smokescreen – iPad demo #1 from Chris @ RevShockAds on Vimeo.

Xss kwetsbaarheid in miljoenen Flash banners.

XSS injectionIn ongeveer 8 miljoen Flash-reclames is een xss-lek gevonden. Daarbij wordt nu een veelgebruikte adserver misbruikt voor de verspreiding van deze malafide reclames.
Lees verder »

Papervision 3.0 is coming

papervision 3d Afgelopen dinsdag is er bekend gemaakt dat Papervision 3.0 onderweg is. Versie 3.0 zal opnieuw gebouwd worden voor Flash Player 10. Hierdoor zal hij dan ook niet backward compatible zijn aangezien Flash Player 10 betere prestaties en technieken gebruikt dan zijn voorgangers. Voor de “oude” players is versie 2.1 te gebruiken. Deze zal niet meer door het papervision team door ontwikkeld worden, zij gaan zich volledig inzetten voor versie 3.0.
Lees verder »

Propeller aandrijven

Voor een spel ben ik gaan uitzoeken hoe ik een propeller kon laten aandrijven door middel van de pijltoetsen. Bedoeling was dat door de snelheid waarmee je de linker en rechter pijltoets indrukt de propeller sneller of langzamer zou gaan draaien.

Ik heb voor het berekenen van de snelheid de tijd tussen de twee toetsaanslagen gemeten. Deze tijd is in millisecondes. Dit sla ik op in een array waar maximaal 10 aanslagen in worden opgeslagen. Hiervan bereken ik vervolgens een gemiddelde. Om de overgang soepel te laten verlopen gebruik ik een vertraging.

Actionscript:
  1. import flash.events.KeyboardEvent;
  2.  
  3. var lastKeyPressTime:Date = new Date();
  4. var intervalTime:Number = 0;
  5. var maxInterval:Number = 300;
  6. var intervalTollerance:uint = 80; // 80 milliseconde haal je toch niet.
  7. var isRunning:Boolean = false;
  8. var gemiddelde:Number = 0;
  9. var intervalArray:Array = [maxInterval];
  10. var powerBlocks:uint = 20;
  11. var maxPower:uint = 1000;
  12. var power:uint = 0;
  13.  
  14. var py:Number = maxInterval;
  15. var ease:Number = 20;
  16.  
  17. stage.addEventListener(KeyboardEvent.KEY_DOWN, keyPressed);
  18.  
  19.  
  20. function myEnterFrame(event:Event):void
  21. {
  22.     if (intervalArray.length> 10){
  23.         intervalArray = new Array();
  24.         intervalArray.push(gemiddelde);
  25.     }   
  26.    
  27.     gemiddelde = 0;
  28.     for (var i:uint = 0; i <intervalArray.length; i++){
  29.         gemiddelde += intervalArray[i];
  30.     }
  31.     gemiddelde = gemiddelde / intervalArray.length;
  32.    
  33.     py += (gemiddelde - py) / ease; 
  34.    
  35.     power = maxPower - (maxPower / powerBlocks) * Math.floor((powerBlocks / (maxInterval-intervalTollerance)) * (gemiddelde-intervalTollerance));
  36.    
  37.     proppelor.rotation += (30/ 300) * (300 - py);
  38. }
  39.  
  40. function keyPressed(e:KeyboardEvent):void
  41. {
  42.     if (e.keyCode == 39 || e.keyCode == 37){
  43.         if (!isRunning){
  44.             isRunning = true;
  45.             this.addEventListener(Event.ENTER_FRAME, myEnterFrame);
  46.         }
  47.         var curTime:Date = new Date();
  48.         intervalTime = curTime.getTime() - lastKeyPressTime.getTime();
  49.         lastKeyPressTime = new Date();
  50.        
  51.         if (intervalTime> maxInterval){
  52.             intervalTime = maxInterval;
  53.         }
  54.         intervalArray.push(intervalTime);
  55.     }
  56.     if (e.keyCode == 38){
  57.         isRunning = false;
  58.         this.removeEventListener(Event.ENTER_FRAME, myEnterFrame);
  59.     }
  60. }

Actionscript 3.0 API reference voor de iPhone

iphone_as3_referenceMike Chambers heeft een Actionscript 3.0 API reference voor de iPhone uitgebracht. Dit is een tool voor de iPhone waarmee je op je iPhone een referentie bibliotheek van Actionscript 3.0 hebt.  In de bibliotheek zitten de API gegevens van Flash, Flex en Air. Deze tool is gratis te donwloaden in Apples App Store.

Hier nog wat foto's.

Compileer Actionscript online

Er zijn al verschillende paketten waarmee je zonder tussenkomst van een Adobe pakket Actionscript code kan compileren. Dat is nu ook mogelijk zonder een van die andere paketten te gebruiken. Namelijk op de volgende website.  Je moet wel al je code in één class zetten en gebruik maken van bestaande frameworks zit er ook niet in.

MultiColumnText AS3 class

Nadat ik de 'MultiColumnText' class had bekeken  die in de  ActionScript 3.0 voorbeelden zat, wilde ik eigenlijk dat het allemaal net iets anders zou werken. Zo wilde ik niet een hoogte opgeven die de kolommen moesten krijgen. In plaats daarvan juist alleen een kolom breedte en dat de hoogte zelf bepaald werd aan de hand van de hoeveelheid tekst. Hier is de volgende class uit voortgekomen.

Actionscript:
  1. //ActionScript 3.0
  2. package {
  3.  import flash.display.Sprite;
  4.  import flash.text.TextField;
  5.  import flash.text.TextFieldAutoSize;
  6.  import flash.text.TextFormat;
  7.  
  8.  public class MultiColumnText extends Sprite{
  9.   
  10.   private var columnArray:Array;
  11.   private var cols:Number = 2;
  12.   private var columnWidth:Number = 100;
  13.   private var columnSpacing:Number;
  14.   private var maxLines:Number;
  15.   private var textStr:String;
  16.   private var textformat:TextFormat;
  17.   
  18.   
  19.   // constructor
  20.   public function MultiColumnText(cols:Number, columnWidth:Number, colSpacing:Number = 10) {
  21.    this.cols = cols;
  22.    this.columnWidth = columnWidth;
  23.    this.columnSpacing = colSpacing;
  24.    textformat = new TextFormat();
  25.    
  26.    createColumns(cols);
  27.   }
  28.   
  29.   /**
  30.    * createColumns
  31.    * Creates the number of textfields needed.
  32.    *
  33.    * @param cols Number Number of columns.
  34.    */
  35.   private function createColumns(cols:Number):void {
  36.    columnArray = new Array();
  37.    for (var column:int = 0; column &lt;cols; column++) {
  38.     var columnField = createColumnTextField();
  39.      columnField.x = column * columnWidth + (column * columnSpacing);
  40.     columnArray.push(columnField);
  41.     addChild(columnField);
  42.    }
  43.   }
  44.   
  45.   /**
  46.    * createColumnTextField
  47.    * Creates the textfield for each column.
  48.    *
  49.    * @return TextField Textfield to be returned.
  50.    */
  51.   private function createColumnTextField():TextField {
  52.    var columnTextField:TextField = new TextField();
  53.     columnTextField.autoSize = TextFieldAutoSize.LEFT;
  54.     columnTextField.border = false;
  55.     columnTextField.width = columnWidth;
  56.     columnTextField.wordWrap = true;
  57.     columnTextField.multiline = true;
  58.    return columnTextField;
  59.   }
  60.   
  61.   /**
  62.    * text
  63.    * Set the multicolumn text.
  64.    *
  65.    * @param textString String String to be places on the textfield columns.
  66.    */
  67.   public function set text(textString:String):void {
  68.    textStr = textString;
  69.    fillColumns();
  70.   }
  71.   
  72.   
  73.   /**
  74.    * setTextFormat
  75.    * Set the column textfield textformat.
  76.    *
  77.    * @param tformat  TextFormat TextFormat to be attached to the column textfields.
  78.    */
  79.   public function setTextFormat(tformat:TextFormat):void {
  80.    textformat = tformat;
  81.    fillColumns();
  82.    for (var i:int = 0; i &lt;columnArray.length; i++) {
  83.     columnArray[i].setTextFormat(textformat);
  84.    }
  85.    
  86.   }
  87.   
  88.   /**
  89.    * fillColumns
  90.    * Calculates the number of lines for each column according to the text to be placed.
  91.    * Next is inserts the text pieces to each column.
  92.    */
  93.   private function fillColumns():void {
  94.    var invisibleTextField:TextField = new TextField();
  95.     invisibleTextField.autoSize = TextFieldAutoSize.LEFT;
  96.     invisibleTextField.multiline = true;
  97.     invisibleTextField.wordWrap = true;
  98.     invisibleTextField.width = columnWidth;
  99.     invisibleTextField.text = textStr;
  100.     invisibleTextField.setTextFormat(textformat);
  101.     
  102.     maxLines = Math.ceil(invisibleTextField.numLines / cols);
  103.     
  104.     for (var i:int = 0; i &lt;cols; i++) {
  105.      var startIndex:Number;
  106.      var endIndex:Number;
  107.      var lineStart:Number = ((maxLines * i)&gt; 0) ? (maxLines*i) : 0;
  108.      try {
  109.       startIndex = invisibleTextField.getLineOffset(lineStart);
  110.      }
  111.      catch(e:RangeError) {
  112.       //trace(e);
  113.      }
  114.      
  115.      var lineEnd:Number = ((maxLines * (i+1))&gt; 0) ? (maxLines*(i+1)) : 0;
  116.      try {
  117.       endIndex = invisibleTextField.getLineOffset(lineEnd);
  118.      }
  119.      catch(e:RangeError) {
  120.       //trace(e);
  121.       endIndex = textStr.length;
  122.      }
  123.      columnArray[i].text = textStr.substring(startIndex, endIndex);
  124.     }
  125.     
  126.     invisibleTextField = null; // deletes the textfield.
  127.   }
  128.  }
  129. }

Lees verder »

Volgende pagina »



search this place