| |||||||
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: Mar 2006
Beiträge: 32
|
Hi, sitz grad mal wieder ne Ewigkeit und finde den/die Fehler nicht. Vorab: der Prototyp funktioniert - bis auf zwei Kleinigkeiten 1. Die onEnterFrame-Anweisung läuft und bricht nicht ab - so als ob meine Bedingung, die zum delete führen soll, im Nichts untergeht. Ich weiß nicht, wie ich das schreiben muss. 2. this.oncompletehandler(); >> funktioniert nicht, wie gewünscht. Ich hatte vor, im Aufruf des Prototypes, eine Variable mit dem Namen der Funktion anzugeben, um diese nach abschluss der onEnterFrame-Anweisung ausführen zu lassen. Kann sein, dass es nicht geht, weil 1. ja auch schon nicht funktioniert. 3. Und jetzt meine Rätselfrage: Wie kann ich dafür sorgen, das die End-Positionen gerundet werden? Math.round(Ziel) - funktioniert aber nicht. wollt schreiben this._x = Math.round(this._x) - allerdings geht auch das erst, nach dem er fertig ist... Endlosschleife... irgendwie Aufgabe des Prototypes: Objekt-Animation für Position, Größe, Alpha; Funktionsaufruf nach fertiggesteller Neupositionierung auf der Bühne; Einstellungsmöglichkeiten von Beschleunigung, Geschwindigkeit und Trägheit. Code: MovieClip.prototype.ll_pos = function(newHeight, newWidth, newX, newY, newSP, newSPD, newSPK, newAlpha, callback) {
this._dx = newX;
this._dy = newY;
this._dh = newHeight;
this._dw = newWidth;
this._sp = newSP;
this._spd = newSPD;
this._spk = newSPK;
this._da = newAlpha;
this._cw = ComponentWidth;
this.oncompletehandler = callback;
this.onEnterFrame = function() {
if (Math.abs(this._height-this._dh)<1 && Math.abs(this._width-this._dw)<1 && Math.abs(this.x-this._dx)<1 && Math.abs(this.y-this._dy)<1 && Math.abs(this._alpha-this._da)<1) {
this._height = this._dh;
this._width = this._dw;
this._x = this._dx;
this._y = this._dy;
this._alpha = this._da;
delete this.onEnterFrame;
this.onEnterFrame = null;
this.oncompletehandler();
this.oncompletehandler = null;
} else {
trace("läuft!"
this._height = this._height+(this._dh-this._height)*this._sp;
this._width = this._width+(this._dw-this._width)*this._sp;
this._x = this._x+(this._dx-this._x)*this._sp;
this._y = this._y+(this._dy-this._y)*this._sp;
this._alpha = this._alpha+(this._da-this._alpha)*this._sp;
this._sp = this._sp+(this._spd-this._sp)*this._spk;
}
};
}; Code: mein_mc.ll_pos(Stage.height-150, Math.round((Stage.width/4))-5, Math.round((Stage.width/2))+Math.round((Stage.width/4))+5, 5, 0, 0.2, 0.2, 57, irgendwas); das mit dem onEnterFrame ist erst, seit dem ich die Functionen in den Prototyp umgewandelt habe... die OriginalFunktionen stehen ganz unten: hier funktioniert alles. Im Prototypen habe ich noch den Alpha-Wert eingebaut... Original-Funktion (bei der ich mir nicht sicher bin, ob die schon ne Macke hat - allerdings funktioniert hier noch oncompletehandler() Code: function footer_mask_build() {
trace(this+".footer_mask_build()");
footer.mask._dh = 60;
footer.mask._sp = 0;
footer.mask._spd = 1.000000E-001;
footer.mask._spk = 1.000000E-001;
footer.mask.oncompletehandler = irgendwas()
_root.footer.mask._build();
}
_root.footer.mask._build = function() {
trace(this+"._build()");
this.onEnterFrame = function() {
if (Math.abs(this._height-this._dh)<1) {
this._height = this._dh;
this.onEnterFrame = null;
this.oncompletehandler();
} else {
this._height = this._height+(this._dh-this._height)*this._sp;
this._sp = this._sp+(this._spd-this._sp)*this._spk;
}
};
}; Sieht mehr aus als es eigentlich ist... Wär für jede Hilfe dankbar. lg BdM |
| | |
| | #2 (permalink) |
| Techniker Registriert seit: Sep 2003 Ort: 64807
Beiträge: 16.324
|
if (Math.abs(this._height-this._dh)<1 && Math.abs(this._width-this._dw)<1 && Math.abs(this.x-this._dx)<1 && Math.abs(this.y-this._dy)<1 && Math.abs(this._alpha-this._da)<1) { weniger wäre mehr? lass dir halt die einzelnen werte austracken um zu sehen, ob es überhaupt irgendwann einmal eine situation gibt, die diese ganzen bedingungen erfüllt.
__________________ die ultimative antwort auf alle programmierfragen: der debugger mfg h.g.seib www.SeibsProgrammLaden.de |
| | |
| | #3 (permalink) | |
| Neuer User Registriert seit: Mar 2006
Beiträge: 32
| Zitat:
Hast du nen Vorschalg, wie ich es anstelle, dass die Bewegungen zeitgleich abgearbeitet werden (und nicht nach einander - möchte ineinendergreifende Bewegungen...) wenn ich die funktion zerlege, wird ja auch mit dem zu bearbeitenden mc umgegangen, als würde ne liste abgearbeitet... also wen ich schreibe: 1. Position neu setzen 2. Größe anpassen 3. Alpha verändern das würde heißen, dass auf der bühne genau das mit dem mc passiert... das zerstört das gesamtbild... oder gibts noch ne andere möglichkeit mit der ich alle 5 werte gleichzeitig ändern kann? | |
| | |
| | #4 (permalink) |
| Techniker Registriert seit: Sep 2003 Ort: 64807
Beiträge: 16.324
| das was ich vorgeschlagen hatte: lass dir alle mal austracen trace(Math.abs(this._height-this._dh)+" // "+Math.abs(this._width-this._dw).. weil irgend jemand spielt offensichtlich nicht mit. sonst würde ja deine bedingung erfüllt werden.
__________________ die ultimative antwort auf alle programmierfragen: der debugger mfg h.g.seib www.SeibsProgrammLaden.de |
| | |
| | #5 (permalink) |
| Neuer User Registriert seit: Mar 2006
Beiträge: 32
| Update - Schleife funzt - Funktionsaufruf immer noch nicht
Hi, hier das Update: Code: MovieClip.prototype.ll_pos = function(newHeight, newWidth, newX, newY, newSP, newSPD, newSPK, newAlpha, round, callback, debug) {
this._dx = newX;
this._dy = newY;
this._dh = newHeight;
this._dw = newWidth;
this._sp = newSP;
this._spd = newSPD;
this._spk = newSPK;
this._da = newAlpha;
this._rnd = round;
this.oncompletehandler = callback;
this._dbg = debug;
this.onEnterFrame = function() {
if (Math.abs(this._height-this._dh)<1 && Math.abs(this._width-this._dw)<1 && Math.abs(this._x-this._dx)<1 && Math.abs(this._y-this._dy)<1 && Math.abs(this._alpha-this._da)<1) {
this._height = this._dh;
this._width = this._dw;
this._x = this._dx;
this._y = this._dy;
this._alpha = this._da;
delete this.onEnterFrame;
this.onEnterFrame = null;
//trace("\n۞ Transforming \""+this+"\" complete");
//trace("۞ H"+this._height+"\t|\tW"+this._width+"\t|\tX"+this._x+"\t|\tY"+this._y+"\t|\tA"+this._alpha);
//trace("۞ call: \""+this+".OnCompleteHandler()\"\n");
this.oncompletehandler();
this.oncompletehandler = null;
if (this._rnd) {
this._height = Math.round(this._height);
this._width = Math.round(this._width);
this._x = Math.round(this._x);
this._y = Math.round(this._y);
this._alpha = Math.round(this._alpha);
if (this._dbg) {
trace(this+"._rnd._height = \t\t"+this._height);
trace(this+"._rnd._width = \t\t"+this._width);
trace(this+"._rnd._x = \t\t\t\t"+this._x);
trace(this+"._rnd._y = \t\t\t\t"+this._y);
trace(this+"._rnd._alpha = \t\t"+this._alpha);
}
}
} else {
if (this._dbg) {
trace(this+"._height = \t\t"+this._height);
trace(this+"._width = \t\t"+this._width);
trace(this+"._x = \t\t\t\t"+this._x);
trace(this+"._y = \t\t\t\t"+this._y);
trace(this+"._alpha = \t\t"+this._alpha);
}
this._height = this._height+(this._dh-this._height)*this._sp;
this._width = this._width+(this._dw-this._width)*this._sp;
this._x = this._x+(this._dx-this._x)*this._sp;
this._y = this._y+(this._dy-this._y)*this._sp;
this._alpha = this._alpha+(this._da-this._alpha)*this._sp;
this._sp = this._sp+(this._spd-this._sp)*this._spk;
}
};
if (this._da>this._alpha) {
if (this._spd<0.34) {
trace("\n|||\n|||\n||| ERROR:\n||| >>> "+this+"\n||| Alpha-Wert wurde erhöht: \n||| Variable this._spd muss min. Wert 0.34 haben.\n|||\n||| Aktueller Wert: "+this._spd+"\n||| Berechnung wird unendlich und die Schleife kann nicht beendet werden.\n|||\n|||\n");
delete this.onEnterFrame;
this.onEnterFrame = null;
trace("\n|||\n|||\n||| ERROR:\n||| >>> "+this+"\n||| Die Schleife wurde zwangsweise beendet!\n||| Bitte korrigieren Sie den Wert der Variable auf min. "+this+"._spd=0.34");
}
}
}; Außerdem habe ich statt "_x" den Underscore vergessen ![]() Aufruf this.my_mc.ll_pos(130, Stage.width, 5, 30, 0, 0.34, 0.1, 100, true, function_irgendwas, true); die function wird jedoch nicht ausgeführt... woran das liegt, weiß ich nicht. PfadProblem??? Hat jemand ne Idee, wie ich auf eine Funktion zugreifen kann? lg BdM |
| | |
| | #6 (permalink) |
| Techniker Registriert seit: Sep 2003 Ort: 64807
Beiträge: 16.324
|
niemand kann hier hellsehen. benütze mal: trace(callback); callback(); anstatt this.oncompletehandler(); übergibst du eine funktion oder den namen einer funktion?
__________________ die ultimative antwort auf alle programmierfragen: der debugger mfg h.g.seib www.SeibsProgrammLaden.de |
| | |
| | #7 (permalink) | |
| Neuer User Registriert seit: Mar 2006
Beiträge: 32
| Zitat:
den Namen der Funktion möchte ich übergeben... am ende der neupositionierung soll diese funktion aufgerufen werden. Ich dachte des passt... irgendwie... also ich geh davon aus dass die funktion im _root liegt. und diese funktion möchte ich ansprechen und ausführen... PHP-Code: | |
| | |
| | #8 (permalink) |
| Techniker Registriert seit: Sep 2003 Ort: 64807
Beiträge: 16.324
|
link auf die funktion übergeben wäre besser: my_mc.ll_pos(130, Stage.width, 5, 30, 0, 0.34, 0.1, 100, true, _root.function_irgendwas, true); ... callback(); wenn's ein name ist, dann so und auf den richtigen pfad achten: my_mc.ll_pos(130, Stage.width, 5, 30, 0, 0.34, 0.1, 100, true, "function_irgendwas", true); ... _root[callback]();
__________________ die ultimative antwort auf alle programmierfragen: der debugger mfg h.g.seib www.SeibsProgrammLaden.de Geändert von hgseib (15-04-2007 um 21:49 Uhr) |
| | |
![]() |
| Lesezeichen |
| Themen-Optionen | |
| Ansicht | |
| |