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. }



search this place