| |||||||
Du magst keine Werbung? Wir auch nicht!
Einfach registrieren und die Werbung ist weg. Diese Nachricht sehen nur nicht registrierte Nutzer.
![]() |
| | LinkBack | Themen-Optionen | Ansicht |
| | #1 (permalink) |
| Neuer User Registriert seit: Oct 2003
Beiträge: 10
| Zeichnen aus Array , Geschwindigkeit
Hallo, ich habe ein kleines Problem und weiss nicht wie ich es lösen soll, vielleicht kann mir jemand helfen. Ich lasse Daten (aufgezeichnete Mauspositionen) aus einem Array lesen und diese dann zeichnen. Klappt soweit alles wunderbar, nur hätte ich jetzt gerne, dass das Zeichnen schneller passiert. Ich möchte sozusagen den Prozess beschleunigen. Soweit ich weiss kann einem setInterval da weiterhelfen, jedoch weiss ich nicht, wie ich dies in mein kleines Script einfügen kann, sodass es klappt. Ich freue mich über jede Anregung und jeden Zuspruch. Danke! ActionScript:
|
| | |
| | #2 (permalink) |
| ~~~~~~~~~~~~ Registriert seit: May 2002 Ort: AUSTRIA (OÖ)
Beiträge: 3.298
|
1. willkommen im Forum :-) versuchs mal mit: ActionScript:
__________________ --- :P --- Blog Bei unerwünschten Nebenwirkungen zerreißen Sie die Packungsbeilage oder erschlagen ihren Arzt oder Apotheker |
| | |
| | #3 (permalink) |
| Neuer User Registriert seit: Oct 2003
Beiträge: 10
|
Hallo _geo_ Vielen Dank für die schnelle Antwort! Leider funktioniert es nicht. Mit dem von Dir modifizierten Script zeichnet die Funktion bei mir gar nicht mehr. Die Bezeichnung onEnterFrame ist wichtig für das Starten, bzw. den Zeitpunkt des Startens des Zeichenvorgangs. Ich grübele weiter... |
| | |
| | #4 (permalink) |
| Neuer User Registriert seit: Nov 2001 Ort: Köln
Beiträge: 106
|
... wusste noch gar nich, dass es ein setInterval() auch für Flash gibt! Hab grad mit rumprobiert und das ist ja ein komisches Ding. Hab das auf einen random-Linienzeichner angewandt und mit verschiedenen FrameRate ausprobiert. Lustig: der zeichnet dann soviel Linien, wie er bis zum nöchsten Framewechsel schafft und trägt die dann als Gruppe auf die Bühne auf. Versehe ich die Funktion mit nem updateAfterEvent() sollte Flash ja eigentlich nach jedem Linienzeichnen die Bühne refreshen. macht er auch - aber ziemlich langsam. Hab ich ne FrameRate von 120, müsste ja (bei Unterlastung) alle 8.3 Millisecs ein Bild gezeichnet werden. Was weiss ich, wie schnell der das bei nem onEnterFrame wirklich macht: jedenfalls sieht's schnell aus und wird sich wohl in der Region bewegen. Wenn ich das stattdessen mit setInterval und updateAfterEvent() mache, sollte ich ja iegentlich die 120-Frame-Barriere sprengen können... wenn ich das Intervall auf z.B. 1 Millisec setze. Ist aber nciht der Fall: läuft extrem viel langsamer! Denke also: in Sachen Geschwindigkeit bringt das wohl eher Nach- als Vorteile. @betaheidi: Musst in die Funktion wahrscheinlich noch ein updateStageafterEvent() mit aufnehmen, damit zeichnet. Ansonsten kann man in Deinem Script noch ein paar Dinge beschleunigen: - "bildListe.length" ist konstant; das musst Du nicht in jedem Frame abfragen und kannst Deine if-Abfrage dadurch beschleunigen. Wahrscheinlich ist "Array.length" auch langsamer, als wenn Du einfach "if (bildliste[i]!=undefined)" abfragst. - verschachtelte Arrays kosten Zeit. Schneller ist es, alle Eigenschaften der Punkte in EIN Array zu schreiben, so dass jeder Punkt vier Array-Plätze belegt. bildliste[0] = _x des ersten Punkts, bildliste[1] = _y der ersten Punkts, bildliste[2] = farbe des ersten Punkts, bildliste[3] = staerke des ersten Punkts, bildliste [4] = _x des zweiten Punkts... etc. - den Umweg über die Variablen "this._farbe" und "this._staerke" kannst Du Dir (und dem Script) ersparen; der kostet nur Zeit. Die Adressierung mit "this" im Übrigen nochmal mehr als eine lokale Variable mit "var _staerke = [irgendwas]". Also einfach direkt im lineTo() auf das Array zugreifen. - eine if-Abfrage mit "||" ist (angeblich) langsam. Daher lieber zwei if-Abfragen schreiben (einen mit Kondition1, einen mit Kondition2) und jeweils den Funktionsblock eintragen - auch wenn er dann doppelt vorhanden ist.
__________________ http://www.rumbke.de |
| | |
| | #5 (permalink) |
| Neuer User Registriert seit: Nov 2001 Ort: Köln
Beiträge: 106
|
... ähem... Moment mal. Ist das wirklich beabsichtigt, dass Du Deinen Clip "leerfilm" mit jedem Frame an neue Koordinaten schiebst? Das kostet natürlich Performance satt...?
__________________ http://www.rumbke.de |
| | |
| | #6 (permalink) |
| Neuer User Registriert seit: Oct 2003
Beiträge: 10
|
Vielen Dank Leif für die ausführliche Hilfe! Ich werde mal schauen, dass ich mein Skript mit Hilfe Deiner Ausführungen ein bischen "schlanker" mache. Vielleicht bringt es ja Geschwindigket. Was das Zeichnen angeht...ja, ich bewege den Clip an die Koordinaten die aus dem Array gelesen werden. Er beinhaltet die Darstellung eines Stiftes. Aber vielleicht lasse ich das mal weg, wenn es stark ausbremst. Kann ich also in mein Skript irgendwie den setInterval Befehl einbauen, oder muss ich es komplett umbauen? Danke im Voraus! |
| | |
| | #7 (permalink) |
| Neuer User Registriert seit: Nov 2001 Ort: Köln
Beiträge: 106
|
Also nach meinen knappen Untersuchungen scheint das setInterval() keine performancegünstige Lösung zu sein... und überdies merkwürdig zu reagieren: Ich würde also drauf verzichten. Lasse mich aber gern eines Besseren belehren... :-)
__________________ http://www.rumbke.de |
| | |
| | #8 (permalink) |
| Neuer User Registriert seit: Oct 2003
Beiträge: 10
|
Ich habe mein Script etwas umgebaut und den setInterval Befehl untergebracht und siehe da, es funktioniert schneller. Danke hier schonmal an geo und leif!!! ActionScript:
Jetzt noch eine Frage: Kann ich die aufgezeichneten MausKoordinaten, die ich in dem Array habe, auch auf einen Schlag grafisch darstellen, ohne es nachzeichnen zu lassen? Nach ein bischen Recherche hier im Forum scheint mir dies nur zu funktionieren, indem ich aus den Array Daten mit Hilfe von PHP ein Pixelbild erstellen lasse. Liege ich da richtig, oder gibt es andere, flashinterne Möglichkeiten? Danke! |
| | |
| | #9 (permalink) |
| Neuer User Registriert seit: Nov 2001 Ort: Köln
Beiträge: 106
|
Wie willst Du die denn darstellen? Auf Pixel kannst Du mit Flash ja leider nicht direkt zugreifen. Kannst das aber simulieren, indem Du *ultrakurze* Linien zeichnest. Auf einen Schlag machst Du das, indem Du alle Zeichenschritte innerhalb eines Framewechsels erledigst. ... Frage richtig verstanden?
__________________ http://www.rumbke.de |
| | |
| | #10 (permalink) |
| Neuer User Registriert seit: Oct 2003
Beiträge: 10
|
Leider weiss ich ja nicht was in dem Array steht, da dies ja durch das bewegen der Maus erst mit Koordinaten gefüllt wird. D.h. es muss Schritt für Schritt ausgelesen werden. Anders wäre das, wenn PHP aus den ArrayDaten ein Pixelbild erzeugt und dieses speichert. Das könnte ich dann direkt in Flash per loadMovie reinladen. Habe ich mir mal so gedacht. |
| | |
| | #11 (permalink) |
| Neuer User Registriert seit: Nov 2001 Ort: Köln
Beiträge: 106
|
Musst das Array natürlich Schritt für Schritt auslesen, egal wie Du es auswertest. Wenn Du es aber "auf einen Schlag" und nicht Stück für Stück zeichnen willst, kannst Du das doch problemlos machen. Intern kannst Du zeichnen, was Du willst - auf die Bühne kommt es erst bei einem Framewechsel / StageRefresh. Wenn Du also möchtest, dass das Array komplett gezeichnet auf einmal auf der Bühne auftaucht, musst Du lediglich alle Zeichenschritte innerhalb einer Schleife ohne Framewechsel erledigen. Also eine for- oder while-Schleife. Ist darüberhinaus auch einfacher als setInterval() oder onEnterFrame. Bin mir aber immer noch nicht sicher, ob wir hier von der gleichen Sache reden...? °_o
__________________ http://www.rumbke.de |
| | |
| | #12 (permalink) |
| Neuer User Registriert seit: Oct 2003
Beiträge: 10
|
Das klingt interessant. Nur wie kann ich das skriptmäßig umsetzen, mit einer for oder while Schleife. Und wie zeichne ich intern, ohne dass es auf der Bühne sichtbar ist? Wenn Du mir da noch ein bischen auf die Sprünge helfen könntest, wäre ich Dir noch dankbarer, als ich es ohnehin schon für die ausführliche Hilfestellung bin!!
|
| | |
| | #13 (permalink) |
| Neuer User Registriert seit: Nov 2001 Ort: Köln
Beiträge: 106
|
Ich hab hier mal verschiedene Varianten gebastelt. Musst Du noch minimal an Dein Movie anpassen - Du musst keinen "leerfilm" und keine Arrayfüllung mehr erzeugen, weil Du die ja schon hast. Dafür läuft dieses Script zum Ausprobieren jetzt erstmal so, wie es ist. (Habe dann übrigens doch inkrementierende Schleifen verwendet, weil die Laufrichtung der Schliefe ja die Zeichenreihenfolge beeinflusst). ActionScript:
__________________ http://www.rumbke.de |
| | |
![]() |
| Lesezeichen |
| Themen-Optionen | |
| Ansicht | |
| |