Timer

Timer Adobe Referenzen | TimerEvent Adobe Referenzen

var myTimer:Timer = new Timer(1000);

myTimer.addEventListener(TimerEvent.TIMER, TimerUpdate);

myTimer.start();

 

var e:Number = 1;

function TimerUpdate(event:TimerEvent):void {
myText.text = String(e);
if (e<7) {
e++;
} else {
e=1;
}
}

In der Konsturktorfunktion wird das Zeitintervall in Millisekunden erwartet. Ein zweiter, optionaler Parameter erwartet die Anzahl der Aufrufe. Gibt man den Wert 0 ein, ist die Anzahl der erneuten Aufrufen unbegrenzt.
AS3 Referenzen Timer

Framerate mittels Timer

Hier ein weiteres Beispiel durch Buttonclick werden der Bilder der Zeitleiste von figur_mc in verschiedenen Geschwindigkeiten aufgerufen. Im letzten Bild der Zeitleiste von figur_mc ist der Befehl gotoAndStop(1);

var myTimer:Timer=new Timer(100,0);
myTimer.addEventListener(TimerEvent.TIMER, TimerUpdate);

 

function TimerUpdate(event:TimerEvent):void {
figur_mc.nextFrame();
}

 

function TimerFast(evt:MouseEvent):void {
myTimer.reset();
myTimer.delay=50;
myTimer.start();
}

 

function TimerSlow(evt:MouseEvent):void {
myTimer.reset();
myTimer.delay=100;
myTimer.start();
}

 

fast_btn.addEventListener(MouseEvent.CLICK, TimerFast);
slow_btn.addEventListener(MouseEvent.CLICK, TimerSlow);

 

In diesem Beispiel gibt es einen Movieclip der

Für den Inhalt dieser Seite ist eine neuere Version von Adobe Flash Player erforderlich.

Adobe Flash Player herunterladen

In diesem Flashfilm gibt es einen Movieclip mit Instanznamen "figur_mc". Darin befinden sich 3 Schlüsselbilder. Im ersten Schlüsselbild befindet sich die Figur im Stopzustand. Im Schlüsselbild namens "forward" befindet sich eine MC-Instanz namens "run_mc" welches eine Einzelbildanimation mit vorwärts laufender Figur enthält. Im Schlüsselbild namens "back" befindet sich eine andere MC-Instanz mit rückläufiger Bewegung jedoch mit dem gleichen Instanznamen "run_mc".

var anim:String;
var moveMode:String="stand";//"stand", "run"
var frameSpeed:uint=50;


var myTimer:Timer=new Timer(100,0);
myTimer.addEventListener(TimerEvent.TIMER, TimerUpdate);


// timerfunktion ruft die Frames des run_mc auf
function TimerUpdate(event:TimerEvent):void {
				if(figur_mc.run_mc.currentFrame < figur_mc.run_mc.totalFrames){
				figur_mc.run_mc.nextFrame();
				}else{
					figur_mc.run_mc.gotoAndStop(1);
					}

}

// timer mit einer gewissen Geschwindigkeit starten
function setFrameSpeed(update:uint):void {
	myTimer.reset();
	myTimer.delay=update;
	myTimer.start();
}


function TimerFast(evt:MouseEvent):void {
	frameSpeed=50;
	if (moveMode=="run") {
		setFrameSpeed(frameSpeed);
	}
}

function TimerSlow(evt:MouseEvent):void {
	frameSpeed=100;
	if (moveMode=="run") {
		setFrameSpeed(frameSpeed);
	}

}

fast_btn.addEventListener(MouseEvent.CLICK, TimerFast);
slow_btn.addEventListener(MouseEvent.CLICK, TimerSlow);


function walkForward(evt:MouseEvent):void {
	moveMode="run";
	setFrameSpeed(frameSpeed);
	anim="forward";
	figur_mc.gotoAndStop(anim);
}

function walkBack(evt:MouseEvent):void {
	moveMode="run";
	setFrameSpeed(frameSpeed);
	anim="back";
	figur_mc.gotoAndStop(anim);
}

forward_btn.addEventListener(MouseEvent.CLICK, walkForward);
back_btn.addEventListener(MouseEvent.CLICK, walkBack);


function stopWalk(evt:MouseEvent):void {
	moveMode="stand";
	myTimer.stop();
	figur_mc.gotoAndStop(1);
}


stop_btn.addEventListener(MouseEvent.CLICK, stopWalk);


Programmierte Bewegung mittels Timer

In diesem Flashbeispiel habe ich 2 MovieClips mit jeweils einer Klassendatei: SmileySimple.as und Smiley.as
Mit einem Timer wird in einem bestimmten Interval eine neue Position erzeugt, ausgehend von der jeweiligen Position.

Die Klasse Smiley.as ist etwas erweitert, weil hier ein zweiter Timer hinzugekommen ist, der dafür sorgt, dass sich das Objekt in kleinen Schritten (steps) auf das Ziel zubewegt, bevor ein neues Ziel erzeugt wird.

Mit dem Button kann man die Positionen wieder zurücksetzen. Diese Funktionalität habe ich hier nicht aufgeführt.

Für den Inhalt dieser Seite ist eine neuere Version von Adobe Flash Player erforderlich.

Adobe Flash Player herunterladen

Klasse SmileySimple:

Hier wird jede Sekunde eine neue Position erzeugt und das Element auf diese Position gesetzt:

 

package {
	import flash.display.MovieClip;

	import flash.utils.*;
	import flash.events.*;
	import flash.geom.Point;

	public class SmileySimple extends MovieClip {

		protected var delay:uint=1000;
		protected var myTimer:Timer=new Timer(delay,0);
		protected var distance:uint=30;

		//------------------------------------
		public function SmileySimple() {
			if (stage) {
				init();
			} else {
				addEventListener(Event.ADDED_TO_STAGE,init);
			}
		}

		//-------------------------------------------

		private function init(e:Event=null):void {

			myTimer.addEventListener(TimerEvent.TIMER, TimerUpdate);
			myTimer.start();

		}
		//------------------------------------------------

		protected function TimerUpdate(event:TimerEvent):void {

			var p:Point=getNextPosition();
			trace("xPos: "+this.x+" xZiel: "+p.x);
			this.x=p.x;
			this.y=p.y;


		}

		//----------------------------------------------

		protected function getNextPosition():Point {


			var dirX:int;
			dirX=Math.floor(Math.random()*3)-1;//-1, 0, 1
			var dirY:int;
			dirY=Math.floor(Math.random()*3)-1;

			// wenn beide Werte 0 sind, ergäbe sich keine neue Position
			if (dirX==0&&dirY==0) {
				getNextPosition();
			}

			var xZiel:Number=this.x+distance*dirX;
			var yZiel:Number=this.y+distance*dirY;

			var zielPoint:Point=new Point(xZiel,yZiel);
			return zielPoint;

		}

	}
}

 

 

Klasse Smiley:

Hier wurde die Klasse SmileySimple noch etwas erweitert, so dass Element sich in einer bestimmten Anzahl von Schritten auf das Ziel zubewegt.

 
package {
	import flash.display.MovieClip;

	import flash.utils.*;
	import flash.events.*;
	import flash.geom.Point;

	public class Smiley extends MovieClip {

		protected var delay:uint=1000;
		protected var steps:uint=20;
		protected var myTimer:Timer=new Timer(delay,0);
		protected var myMoveTimer:Timer=new Timer((delay/steps),0);
		protected var xPositions:Array;
		protected var yPositions:Array;
		protected var distance:uint=30;
		protected var reset:Boolean=false;


		//--------------------------------------------------------
		public function Smiley() {
			if (stage) {
				init();
			} else {
				addEventListener(Event.ADDED_TO_STAGE,init);
			}
		}

		//-------------------------------------------

		private function init(e:Event=null):void {
			myTimer.addEventListener(TimerEvent.TIMER, TimerUpdate);
			myTimer.start();
			myMoveTimer.addEventListener(TimerEvent.TIMER, moveTimerUpdate);
		}
		//------------------------------------------------

		protected function TimerUpdate(event:TimerEvent):void {


			myMoveTimer.stop();

			var p:Point=getNextPosition();
			trace("xPos: "+this.x+" xZiel: "+p.x);

			var distX:Number=(p.x-this.x)/steps;
			var distY:Number=(p.y-this.y)/steps;

			xPositions = new Array();
			yPositions = new Array();


			xPositions[0]=this.x+distX;
			yPositions[0]=this.y+distY;

			for (var i:uint=1; i < steps; i++){
		     xPositions[i]=xPositions[i-1]+distX;
		     yPositions[i]=yPositions[i-1]+distY;
		     trace(xPositions[i]);
			}
			myMoveTimer.start();
		}

		protected function moveTimerUpdate(event:TimerEvent):void {
			this.x=xPositions[0];
			xPositions.shift();
			this.y=yPositions.shift();
		}
		//----------------------------------------------

		protected function getNextPosition():Point {
			var dirX:int;
			dirX=Math.floor(Math.random()*3)-1;//-1, 0, 1
			var dirY:int;
			dirY=Math.floor(Math.random()*3)-1;

			// wenn beide Werte 0 sind, ergäbe sich keine neue Position
			if (dirX==0&&dirY==0) {
				getNextPosition();
			}

			var xZiel:Number=this.x+distance*dirX;
			var yZiel:Number=this.y+distance*dirY;

			var zielPoint:Point=new Point(xZiel,yZiel);
			return zielPoint;

		}

	}
}