Zurück   Flashforum > Flash > Stuff

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 29-12-2004, 10:52   #1 (permalink)
will code HTML for food
 
Benutzerbild von querkopf
 
Registriert seit: Mar 2003
Beiträge: 1.232
[STUFF] transform Prototype

Ihr wollt einen schnellen Alphafade?
...kein Problem.

Ihr wollt jetzt zusätzlich noch eine Skalierung???
...auch kein Problem!

Und jetzt auch noch eine Bewgung????!!!

Schaut Euch diesen Prototyp an:

der kann das ALLES!!!

(Erklärungen als Kommentare im as - FLA gibt's ganz unten)

ActionScript:
  1. // transform prototype by querkopf
  2. // inspired by salazars fader ([url]http://www.flashforum.de/forum/showthread.php?t=138331[/url])
  3. //
  4. // Aufruf:
  5. // meinMovieclip.transform(schritte, abbremsen, eigenschaften, callback, variablen)
  6. //
  7. // schritte: number
  8. // - die Schritte die festelegen um wieviel der Wert jeweils erhöht/verkleinert wird. (s. salazars fader)
  9. // - wenn die Standardwerte verwendet werden sollen, einfach auf "null" setzen.
  10. //
  11. // abbremsen: number
  12. // - der Wert der festlegt wie stark die Veränderung abgebremst werden soll .(s. salazars fader)
  13. // - wenn die Standardwerte verwendet werden sollen, einfach auf "null" setzen.
  14. //
  15. // eigenschaften: object
  16. // - die Objekteigenschaften die verändert werden sollen.
  17. // - Zielwert wird hier definiert, als Ausgangswert wird immer der aktuelle Wert genommen.
  18. //
  19. // callback (optional): function
  20. // - Funktion die aufgerufen wird, wenn alle Veränderungen an "eigenschaften" abgeschlossen wurden.
  21. // - liefert alle "eigenschaften" als object zurück
  22. // - muß definiert sein, wenn "variablen" definiert sein sollen
  23. //
  24. // variablen (optional): object
  25. // - ein Objekt mit beliebigen Variablen, die in "callback" über this angesprochen werden können
  26. //
  27. // BSP 1: ....................................................................................
  28. // meinMovieclip._alpha = 0;
  29. // meinMovieclip.transform(null, null, {_alpha:100});
  30. // - ergibt einen einfachen Alphafade wie ihn salazar in seinem Beispiel bereits gebaut hatte
  31. //
  32. // BSP 2: ....................................................................................
  33. // callback = function() { 
  34. //    trace("fertig");
  35. // };
  36. // meinMovieclip._alpha = 0;
  37. // meinMovieclip.transform(null, null, {_alpha:100}, callback);
  38. // - ergibt einen Alphafade der bei Beendigung die Funktion "callback" aufruft
  39. //
  40. // BSP 3: ....................................................................................
  41. // callback = function() { 
  42. //    trace(this.id);
  43. // };
  44. // meinMovieclip._x = 0;
  45. // meinMovieclip._alpha = 0;
  46. // meinMovieclip.transform(null, null, {_alpha:100, _x:240}, callback, {id:"fertig"});
  47. // - ergibt einen Alphafade der bei Beendigung die Funktion "callback" aufruft
  48. // - zusätzlich wird der mc von _x:0 zu _x:240 bewegt
  49. // - in der "callback" Funktion wird das im Aufruf mit übergebene "id" getraced
  50. //
  51. Object.prototype.movement = function(val, fa, nr, st, br) {
  52.     if (i == undefined) {
  53.         i = 0;
  54.     }
  55.     if (this[val]>fa) {
  56.         i += br;
  57.         this[val] -= (st*i);
  58.         if (this[val]<=fa) {
  59.             this[val] = fa;
  60.             this.a.splice(nr, 1);
  61.         }
  62.     } else if (this[val]<fa) {
  63.         i += br;
  64.         this[val] += (st*i);
  65.         if (this[val]>=fa) {
  66.             this[val] = fa;
  67.             this.a.splice(nr, 1);
  68.         }
  69.     } else {
  70.         this[val] = fa;
  71.         this.a.splice(nr, 1);
  72.     }
  73. };
  74. MovieClip.prototype.transform = function(va, st, obj, func, obj2) {
  75.     var va = (typeof va == "null") ? 0.09 : va;
  76.     var st = (typeof st == "null") ? 2 : st;
  77.     var obj = (typeof obj == "object") ? obj : new Object();
  78.     var mc = this;
  79.     mc.a = new Array();
  80.     for (o in obj) {
  81.         if (typeof obj[o] != "function") {
  82.             mc.a.push(o);
  83.         }
  84.     }
  85.     mc.onEnterFrame = function() {
  86.         if (this.a.length<=0) {
  87.             delete this.onEnterFrame;
  88.             return func.call(obj2, obj);
  89.         } else {
  90.             for (o=0; o<=this.a.length; o++) {
  91.                 if (this[this.a[o]] != obj[this.a[o]]) {
  92.                     this.movement(this.a[o], obj[this.a[o]], o, va, st);
  93.                 }
  94.             }
  95.         }
  96.     };
  97. };
  98. //
  99. //
  100. // BSP 4: ....................................................................................
  101. this.callback = function(returnObj) {   
  102.     for (o in returnObj) {
  103.         trace(this.id+"."+o+": "+this.id[o]);
  104.     }
  105. };
  106. this.mc.transform(0.09, 2, {_alpha:10, _xscale:200, _yscale:200, _x:240, _y:240}, callback, {id:this.mc});
  107. stop();
Angehängte Dateien
Dateityp: zip transformPrototype.zip (3,3 KB, 351x aufgerufen)
__________________
Alles ist wie immer. Nur schlimmer.
querkopf ist offline   Mit Zitat antworten
Alt 29-12-2004, 10:58   #2 (permalink)
experience++;
 
Benutzerbild von salazar
 
Registriert seit: Jul 2002
Ort: Düsseldorf
Beiträge: 11.367
Thumbs up

daumen hoch! nettes teil...
ein gewisser as abschnitt kommt mir extrem bekannt vor
vor allem aber auch sehr ausführlich kommentiert und gut beschrieben. hier sollte es also keine, bzw kaum verständnis probs geben...

cya, sal
__________________
Bitte keine Flashfragen an mich schicken. Dafür ist ja das Forum da! Das betrifft auch Profilnachrichten.
salazar ist offline   Mit Zitat antworten
Alt 29-12-2004, 11:01   #3 (permalink)
will code HTML for food
 
Benutzerbild von querkopf
 
Registriert seit: Mar 2003
Beiträge: 1.232
thx

hab' mir noch überlegt, evtl könnte man den Aufruf von "va, st, obj" noch in " obj, va, st," umwandeln, dann reicht es z.B. mc.transform({_alpha:100}); zu schreiben....
aber das kann dann ja jeder nach seinem Geschmack anpassen
__________________
Alles ist wie immer. Nur schlimmer.
querkopf ist offline   Mit Zitat antworten
Alt 29-12-2004, 11:26   #4 (permalink)
nky
Bontempi Punk
 
Benutzerbild von nky
 
Registriert seit: Dec 2001
Ort: Dtld/Pfalz
Beiträge: 4.185
hossa gefällt mir sehr gut !

thanx für die anregung !

Gruss nky
nky ist offline   Mit Zitat antworten
Alt 29-12-2004, 11:49   #5 (permalink)
Pending…
 
Benutzerbild von psyk
 
Registriert seit: Jul 2002
Ort: Hamburg
Beiträge: 3.866
Thumbs up Paßt, wackelt und hat Luft.

Kann mich meinen Vorrednern nur anschließen.

Nettes Teil.
__________________
:: Warum einfach, wenn's auch kompliziert geht! ::
psyk ist offline   Mit Zitat antworten
Alt 29-12-2004, 12:33   #6 (permalink)
will code HTML for food
 
Benutzerbild von querkopf
 
Registriert seit: Mar 2003
Beiträge: 1.232
Danke, danke
__________________
Alles ist wie immer. Nur schlimmer.
querkopf ist offline   Mit Zitat antworten
Alt 23-02-2005, 10:36   #7 (permalink)
=)
 
Benutzerbild von dante
 
Registriert seit: Jun 2003
Beiträge: 499
Question

das script sieht sehr nützlich aus - ich denke ich könnte es bestimmt einsetzen, nur den code verstehe ich noch nicht ganz:

wenn die variable obj mit {wert,wert,wert} gefüllt wird, wie nennt man das?

ActionScript:
  1. for (o in obj) {
  2.         if (typeof obj[o] != "function") {
  3.             mc.a.push(o);
  4.         }
  5.     }

formt alle inhalte von obj in ein array a um die inhalte ansprechen zu können, richtig?
(vielleicht ne dumme frage, aber warum darf o keine function sein?)

das ist der punkt wo ich noch nicht ganz durchblicke:
ActionScript:
  1. mc.onEnterFrame = function() {
  2.         if (this.a.length<=0) {
  3.             delete this.onEnterFrame;
  4.             return func.call(obj2, obj);
  5.         } else {
  6.             for (o=0; o<=this.a.length; o++) {
  7.                 if (this[this.a[o]] != obj[this.a[o]]) {
  8.                     this.movement(this.a[o], obj[this.a[o]], o, va, st);
  9.                 }
  10.             }
  11.         }
  12.     };

für jedes element im array a wird etwas geprüft (( this[this.a[o]] != obj[this.a[o]] )) von dem ich nicht verstehe was es effektiv bedeutet (also die einzelteile sind mir klar nur wie sie zusammenhängen und warum das so gut ist, versteh ich nicht)

und dann falls "es" nicht gleich war (bloss was? ) wird die movement funktion mit this.a[o] (=was macht val in der funktion?) und obj[this.a[o]] (ist das nicht genau das selbe? was bedeutetd fa? ) aufgerufen.

sind alle bewegungen ausgeführt und es gibt keine elemente mehr im array wird onenterframe gelöscht und
ActionScript:
  1. return func.call(obj2, obj);
aufgerufen.

wieso da jetzt call steht leuchtet mir nciht ein. was call genau macht verstehe ich ebenfals nicht
die flash hilfe sagt zu call:

Zitat:
In diesem Beispiel wird mit Function.call() dafür gesorgt, dass sich eine Funktion wie eine Methode eines anderen Objekts verhält, wobei die Funktion nicht im Objekt nicht gespeichert wird.

function MeinObjekt() {
}
function meineMethode(obj) {
trace("dies == obj? " + (dies == obj));
}
var obj = new MeinObjekt();
MeineMethode.call(obj, obj);

Die trace()-Aktion sendet den folgenden Code an das Bedienfeld Ausgabe:

dies == obj? true
was ich schon nciht verstehe. woher kommt "dies" ? übersetzungsfehler von this?
und was würde ich bekommen wenn ich in einer methode oder funktion (was ist der _genaue_ unterschied?) this aufrufe? das objekt auf dem die methode liegt? wenn eine funktion auf root liegt bekomme ich dann mit this nen verweis auf _root?

so viele fragen und ich bin nichtmal am ende von dem kleinen script angekommen
__________________
x 600.6
y 123.3

Geändert von dante (23-02-2005 um 10:40 Uhr)
dante ist offline   Mit Zitat antworten
Alt 09-08-2005, 19:40   #8 (permalink)
Neuer User
 
Benutzerbild von le block
 
Registriert seit: Mar 2002
Ort: Leipzig
Beiträge: 57
danke,danke für das nette Teil. Ich kann's nämlich gerade gebrauchen.
Ich hätte da aber noch eine Frage dazu:

Und zwar verhält es sich so, dass es beim Bewegen (_x,_y) und gleichzeitigem Skalieren(_xscale,_yscale) zu (komischen) Rucklern kommt. also keine lineare Bewegung vom Startpunkt zum Endpunkt. Ich kann mir vorstellen,dass das mit a) der Skalierung zusammmenhängt und b) wenn die Differenzen der x,Y-Werte sich zu sehr unterscheiden. (Beispiel: xStart=20,xEnd=50->Diff=30; yStart=20,yEnd=500,Diff=480) Daher wird x eher erreicht als y.

Da ich aber genauso wie mein Vorposter eher in den Code schaue ,als verstehe, wollte ich Fragen: Wie erreicht man eine lineare (eher wohl geradlinige) Bewegung+Skalierung. (xEnd,yEnd,scaleEnd zur gleichen Zeit)?

Danke. le block
le block ist offline   Mit Zitat antworten
Alt 22-08-2005, 09:00   #9 (permalink)
will code HTML for food
 
Benutzerbild von querkopf
 
Registriert seit: Mar 2003
Beiträge: 1.232
...zur gleichen Zeit erreicht man das nur, wenn man das so dann neu programmiert

nee, im ernst... das wär' natürlich cool, wenn das dann gleichzeitig alles am endpunkt ankommt, das geht aber leider so, mit dem snippet nicht.

(eigentlich hatte ich das hier unter anderem auch gepostet, damit falls rein zufällig jemand auf die geniale Idee kommt, wie das zu lösen wär' das dann hier drunter schreibt )
__________________
Alles ist wie immer. Nur schlimmer.
querkopf 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 18:42 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele