Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 12-10-2005, 14:29   #1 (permalink)
asking to fast
 
Benutzerbild von falsanu
 
Registriert seit: Jul 2002
Beiträge: 59
Bilderreihe anordnen und auf Mauszeiger reagieren lassen

Hi Forum,

ich hab mal ne kleine Frage, an der ich mir seit Stunden die Zähne ausbeiße.

Kurze Erklärung der Aufgabe:

Ich möchte 10x10 Bilder aus einem Ordner auslesen und diese auf dem Monitor, ordentlich neben- und untereinander gereiht haben. Raus kommt ein gesamtes Bild.

ActionScript:
  1. function ladeBilderHCL(zeilen, spalten, breite, hoehe) {
  2.     zaehler = 1;
  3.     _root.createEmptyMovieClip("conti", 0);
  4.     for (var i = 0; i<zeilen; i++) {
  5.         for (var j = 0; j<spalten; j++) {
  6.             conti.createEmptyMovieClip("z"+i+"s"+j, zaehler);
  7.             conti["z"+i+"s"+j].loadMovie("hcl/haerder_"+String(zaehler)+".jpg", zaehler);
  8.             conti["z"+i+"s"+j]._x = j*40;
  9.             conti["z"+i+"s"+j]._y = i*40;
  10.             zaehler++;
  11.         }
  12.     }
  13. }

Und nun wollte ich Probieren, das beim herüberfahren, über das entstandene Bild sich die einzelnen "Pixel" vergrößern oder verkleinern. Das hab ich auch schon mit dem onMouseMove-Befehl hinbekommen.

ActionScript:
  1. for (var k = 0; k<10; k++) {
  2.         //trace("drin");
  3.         for (var l = 0; l<10; l++) {
  4.             //trace("drin2");
  5.             conti["z"+k+"s"+l].onMouseMove = function() {
  6.                 if (this._xmouse>0 && this._xmouse<40 && this._ymouse>0 && this._ymouse<40) {
  7.                     //trace("drin3");
  8.                     swapDepths(120);
  9.                     if (this.xscale<=150 && this._yscale<=150) {
  10.                         var w = this._width;
  11.                         var h = this._height;
  12.                         this._yscale += 4;
  13.                         this._xscale += 4;
  14.                         this._x = this._x+(w-this._width)/2;
  15.                         this._y = this._y+(h-this._height)/2;
  16.                     }
  17.                 } else {
  18.                     if (this._xscale>100 && this._yscale>100) {
  19.                         var w = this._width;
  20.                         var h = this._height;
  21.                         this._yscale -= 4;
  22.                         this._xscale -= 4;
  23.                         this._x = this._x+(w-this._width)/2;
  24.                         this._y = this._y+(h-this._height)/2;
  25.                     }
  26.                 }
  27.             };
  28.         }
  29.     }

Das Problem ist nun, das ich denke, dass dies sehr viel Codemüll ist und man das ganze sauberer Coden kann.

Wie kann ich denn einem dyn. erstellten MovieClip einen Namen zuweisen und ihm in einer onEnterFrame-Abfrage diesen Namen auslesen, splitten und dadurch auf andere "Pixel" einfluss nehmen lassen?

Der Hintergrund ist der: Ich würde ich gerne noch nen bischen mehr mit den daraus entstehenden Möglichkeiten abgehen wollen und das ganze nen bischen modularer machen wollen.
Ein Beispiel: Ich würde gern, das ich mir einfach ne Funktion schreibe in der steht, was passieren soll wenn die Maus über irgendeinem x-belibigen "P
ixel" steht. Da kommt man dann wahrscheinlich schnell zur OOP, das hab ich auch schon versucht, aber es kam nur müsli dabei raus.

Ich hoffe das jemand ne Idee hat.

Vielen Dank im Vorraus

Gruß Falsanu
falsanu ist offline   Mit Zitat antworten
Alt 12-10-2005, 14:50   #2 (permalink)
:Void
 
Benutzerbild von janoshnosh
 
Registriert seit: Jun 2005
Ort: börlin
Beiträge: 931
uff das ist ein bisschen viel.... ich antworte mal auf eine frage [QUOTE=falsanuWie kann ich denn einem dyn. erstellten MovieClip einen Namen zuweisen und ihm in einer onEnterFrame-Abfrage diesen Namen auslesen, splitten und dadurch auf andere "Pixel" einfluss nehmen lassen?[/QUOTE]du kannst MC's variablen mit auf den weg geben, ich mache das immer über eine id. bei dir würden sich wahrscheinlich eher zwei variablen empfehlen, ein x und ein y sozusagen, anbei auch eine kleine code-vereinfachung:
ActionScript:
  1. function ladeBilderHCL(zeilen, spalten, breite, hoehe) {
  2.         zaehler = 1;
  3.         var conti = _root.createEmptyMovieClip("conti", 0);
  4.         for (var i = 0; i<zeilen; i++) {
  5.                 for (var j = 0; j<spalten; j++) {
  6.                         var mc = conti.createEmptyMovieClip("z"+i+"s"+j, zaehler);
  7.                         mc.loadMovie("hcl/haerder_"+String(zaehler)+".jpg", zaehler);
  8.                         mc._x = j*40;
  9.                         mc._y = i*40;
  10. //hier die variablen
  11. [B]mc.X = spalten;
  12. mc.Y = zeilen;[/B]
  13. //oder/und
  14. [B]mc.id = zaehler;[/B]
  15.                         zaehler++;
  16.                 }
  17.         }
  18. }
damit könntest du jetzt bei einem oEF (onEnterFrame) per this.id, this.X, this.Y auch die nachbarn ihrer selber finden - meintest du sowas?

eine gefahr sehe ich aber dabei, in der for-schleife so viele loadMovies zu starten... hab da mal was von zwei loads gleichzeitig gelesen - daran glaube ich zwar nicht, aber das scheint ein issue zu sein, also vorsicht. außerdem vorsicht: nicht versuchen, direkt nach dem loadMovie die oEF's zuzuweisen, erst warten bis fertig geladen wurde

ich hoffe, das hilft dir ein bisschen.
gruß janosch
janoshnosh ist offline   Mit Zitat antworten
Alt 12-10-2005, 14:57   #3 (permalink)
asking to fast
 
Benutzerbild von falsanu
 
Registriert seit: Jul 2002
Beiträge: 59
Erst einmal danke, die Codevereinfachung ist super, so seh ich endlich wieder durch.

Zitat:
außerdem vorsicht: nicht versuchen, direkt nach dem loadMovie die oEF's zuzuweisen, erst warten bis fertig geladen wurde
Genau daran bin bei meinen anderen Versuchen gescheitert. Ich konnte die oEF's nie ansprechen. Und meine Mühen zu warten bis alles geladen wurde scheiterten ebenfalls. Habs mit einer SetInterval-Abfrage probiert, so oft fragen bis getBytesTotal==getBytesLoaded, war aber nicht von erfolg gekrönt.

Wie finde ich herraus ob alle MCs erstellt und geladen wurden?

Gruß Falsanu
falsanu ist offline   Mit Zitat antworten
Alt 12-10-2005, 15:22   #4 (permalink)
................
 
Benutzerbild von Der Frager
 
Registriert seit: Jun 2004
Beiträge: 15.890
Tag...
Da gibt's doch so viel Krams hier. Preloader -> Mal suchen...
HIER nochmal so 'ne einfache Thumbnail-Geschichte von mir. Vielleicht kannst du daraus was gebrauchen.
__________________

ternärer Konditionaloperator

+++ Bitte keine Privat-Nachrichten bezüglich Flashfragen! +++
Der Frager ist offline   Mit Zitat antworten
Alt 12-10-2005, 15:23   #5 (permalink)
:Void
 
Benutzerbild von janoshnosh
 
Registriert seit: Jun 2005
Ort: börlin
Beiträge: 931
da hat "der frager" heute eine sehr brauchbare methode vorgestellt, das loadMovie-problem zu umgehen (siehe hier ), und zwar kann man das umgehen, indem man den zu ladenden inhalt nicht in den eigentlichen MC 'A' lädt, sondern in einen unter-MC 'B'. 'A' kannst man dann zuweisen was man willst und muss nicht warten, bis irgendwas fertig geladen wurde. wenn du nämlich so viele loads gleichzeitig lädtst, wäre es ein bisschen übertrieben, auch noch eine "ladevorgangskontrollschleife" ( ) (preloader) für jeden einzelnen mitlaufen zu lassen.

das wäre also ne möglichkeit.

gruß janosch

EDIT:
oh da isser ja
janoshnosh ist offline   Mit Zitat antworten
Alt 12-10-2005, 15:25   #6 (permalink)
asking to fast
 
Benutzerbild von falsanu
 
Registriert seit: Jul 2002
Beiträge: 59
Hab jetzt mal versucht mit

trace(_root.conti.z2s2.X);

herraus zu bekommen wie groß X ist, aber ich bekomme als antwort nur "undefined"

zum Mäuse melken...
falsanu ist offline   Mit Zitat antworten
Alt 12-10-2005, 15:51   #7 (permalink)
asking to fast
 
Benutzerbild von falsanu
 
Registriert seit: Jul 2002
Beiträge: 59
Alles klar. Ich habe es jetzt hinbekommen, das X und Y ausgelesen werden, jedoch nur wenn ich die funktionen direkt in das oEF schreibe. Gibt es auch eine Möglichkeit zu sagen:

bla bla bla
mc1.onEnterFrame = tueIrgendWas();

Aufjedenfall schonmal danke, mit dem was ich jetzt hab kann ich 1000%ig schon mehr machen als mit meinem Ansatz, und ich hab mal wieder ne Menge gelernt, wie man Code möglichst klein halten kann.
falsanu ist offline   Mit Zitat antworten
Alt 12-10-2005, 15:56   #8 (permalink)
:Void
 
Benutzerbild von janoshnosh
 
Registriert seit: Jun 2005
Ort: börlin
Beiträge: 931
ActionScript:
  1. mc1.onEnterFrame = function () { tueIrgendWas(); }
janoshnosh ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an



Alle Zeitangaben in WEZ +1. Es ist jetzt 19:15 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele