Fragen-paket: "SetInterval", "delete onEnterFrame", "for" UND etc ..

Leugim

Erfahrenes Mitglied
Also gut.. Ich bin nu wieder da und mit im Koffer ein schickes Packet an Fragen..

Wir sehen in der Uni momentan, wie muster generiert werden können und da hab ich mich entschlossen, solche (simplen) Muster mit Flash animiert zu realisieren..
Es geht nicht um die Berechnung dieser Musters...
Vielmehr habe ich schon ein seeehr einfaches gemacht:
http://www.migues.com.ar/trama.htm
Da kann man begrenzt das Muster beeinflussen (?).
Nun kommen wir zu meinem Fragen-packet. Der aufbau des Beispiels ist relativ einfach. Es handelt sich um 14 Streifen, mit jeweils 5 instanzen der gleichen animation: Ein schwarzes cuadrat, das sich dreht.

nun lass ich diese per onEnterFrame abrufen, ob sie nun abspielen sollen, oder nicht....
Klappt alles ganz ordentlich, bis auf dass ich mal nen Blich auf die Processorauslastung geworfen habe und da gruselige 80% standen. Dieses Beispiel soll ja mal später noch viel umfangreicher werden!

Wie kann ich da ein bisschen Leistung sparen?
Auf jedem Cuadrat-MC liegt folgender Code:
PHP:
onClipEvent (enterFrame) {
  	if (_parent.pl) {
  		play();
  	} 
  	delete this.onEnterFrame;
  }
Aber irgendwie ging, als ich den delete-befehl dazuschrieb, die Processosorauslastung keinen deut runter... *schäm*

Ein weiterer schonheitsfehler ist, wie ich die Verzögerung der animation einleite...
Auf Spanisch würde man "A lo bruto" sagen.. ("Mit dem Kopf durch die Wand" oder so ähnlich)naja..
auf dem Button der die Animation starten liegt folgender code:
PHP:
	this.t1.pl = true;
  	var milisecs = this.milcont.mil.text;
  	// Milisekunden, die gewartet werden sollen 
  	this.stop();
  	var IV = setInterval(function () {
  		moveOn();
  	}, milisecs);
  	function moveOn() {
  		this.t2.pl = true;
  	}
Wobei das nur ein Auschnitt ist.. eigentlich geht der Code noch ne ganze ecke runter, weil jeder streifen (t1 bis t7 und s1 bis s7) die variable "pl" = true; (immer jeweils verzögert) bekommen.. Wobei ich bei jedem Streifen die function moveOn(); andersbenennen muss..
Irgendwie so reingarnicht die schönste Lösung.. ich hab schon einen "For" versuch hintermir, aber da habe ich es partout nicht hingekriegt, dass die Streifen verzögert anfangen abzuspielen..... die haben dann alle gleichzeitig angefangen...
Tja das wars dann erstmal..........:-( Der verzögerungscodeschnippsel stammt von irgendwo hier aus dem Forum...

Ich hoffe mal irgendwer erbarmt sich meiner und greift mir unter die Arme..
Danke schon mal !
Miguel
 
Zuletzt bearbeitet:
Hi,

ich vermute, dass bei Dir ein Intervall nicht gelöscht wird, nachdem alle Reihen abgearbeitet sind. Wenn Du alles übersichtlich strukturierst (dazu gehört auch, z.B. keine Intervalle in lokalen Variablen zu speichern), sollten solche Probleme nicht mehr auftreten (Im Anhang mal ein Beispiel, das nur mit setInterval und onEnterFrame arbeitet).

Allgemein entstehen Performanceeinbußen eher durch das erforderliche Neuzeichnen vieler Objekte und weniger durch onEnterFrame-Methoden. Wenn es Dir um komplexe Muster mit vielen Instanzen geht, ist Flash möglicherweise nicht die richtige Plattform - ich würde mich dann wohl eher in Richtung C/C++ oder Assembler (siehe PC-Demos) orientieren. ;)

Gruß
.
 

Anhänge

  • pads.zip
    8,1 KB · Aufrufe: 56
Hallo ! tausend Dank für deine Hilfe.
Aber eine verständniss Frage hätte ich doch noch:
PHP:
var ang = 0;
 var rspd = 0.05;
 var freq = 1;
 var rad = 30;
 
 function go() {
 	this.onEnterFrame = function() {
 		ang += (rspd * dir);
 		if (ang >= Math.PI * 2) ang -= Math.PI * 2;
 		if (ang <= 0) ang += Math.PI * 2;
 		this._rotation = ang / Math.PI * 180;
 		this._xscale = 100 + Math.sin(ang * freq) * rad;
 		this._yscale = this._xscale;
 		trace(ang);
 	}
 }

Wofür genau ist die Variable "ang" da? Ich konnte mir da irgendwie nicht so richtig einen Reim draus machen..
Danke!
 
Hi,

"ang" steht für "angle" und ist der Winkel der Rotation. Ich verwende den Winkel im Bogenmaß (macht sich beim Sinus einfacher, der ebenso im Bogenmaß angegeben wird) und rechne ihn für die Rotation ins Gradmaß um.

Dieser ganze Block befasst sich nur mit der Animation der Blöcke: Du kannst selbstverständlich weiterhin eine Zeitleistenanimation verwenden, wobei die Funktion go() lediglich ein "play()" anstoßen müsste. ;)

Gruß
.
 
Dann habe ich deine Lösung verstanden. Kommt nur noch das selber-bauen und sicherlich noch ein oder zwei Fragen ..
Vielen Dank.
Miguel
 

Neue Beiträge

Zurück