Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 04-06-2005, 16:29   #1 (permalink)
Neuer User
 
Registriert seit: May 2005
Beiträge: 11
Question MovieClip.unscharf

Hi!
Ich ("fortgeschrittender Anfänger") versuche eine Funktion zu schreiben die mir einen MC unscharf macht. Leider funktioniert es nicht so wie ich es mir vorgestellt habe.

Ich habe die Funktion im 1. (und einzigsten) Frame.
Ich würde gern wissen was ich falsch gemacht habe, denn ich weiß jetzt absolut nicht mehr was ich noch ausprobieren/ändern kann.

Außerdem würde ich gern wissen ob ich den "with-Block" kürzer gestallten könnte (und wie)?


ActionScript:
  1. MovieClip.prototype.unscharf = function (objekt, pixel) {
  2.     // objekt = Instanzname
  3.     // pixel = Wert um den das Bild verschobenwerden soll
  4.     var nextDepth = this.getNextHighestDepth ();
  5.     for (anzahl = 1; anzahl < 8; anzahl++) {
  6.         duplicateMovieClip (this[objekt], objekt + "_" + anzahl, nextDepth);
  7.     }
  8.     with (this[objekt + "1"]) {
  9.         _y += pixel;
  10.     }
  11.     with (this[objekt + "2"]) {
  12.         _x += pixel / 2;
  13.         _y += pixel / 2;
  14.     }
  15.     with (this[objekt + "3"]) {
  16.         _x += pixel;
  17.     }
  18.     with (this[objekt + "4"]) {
  19.         _x += pixel / 2;
  20.         _y -= pixel / 2;
  21.     }
  22.     with (this[objekt + "5"]) {
  23.         _y -= pixel;
  24.     }
  25.     with (this[objekt + "6"]) {
  26.         _x -= pixel / 2;
  27.         _y -= pixel / 2;
  28.     }
  29.     with (this[objekt + "7"]) {
  30.         _x -= pixel;
  31.     }
  32.     with (this[objekt + "8"]) {
  33.         _x -= pixel / 2;
  34.         _y += pixel / 2;
  35.     }
  36. };
  37. this.onLoad = function () {
  38.     this.unscharf (bild, 5);
  39. };

Ich bedanke mich schon mal im Voraus für eure Bemühungen
panzerfahrer ist offline   Mit Zitat antworten
Alt 04-06-2005, 16:57   #2 (permalink)
nerdig working
 
Benutzerbild von michael
 
Registriert seit: Jul 2001
Ort: Hamburg
Beiträge: 5.832
im wesentlichen hast du 3 fehler gemacht.

1. du rufst getNextHighestDepth() vor der scheife ab, dadurch ist sie immer gleich und die movieclip ersetzen sich.

2. du übergibst den movieclip als referenz, versuchst ihn aber as string auszuwerten, also this.unscharf("bild", 5)

3. du hast den unterstrich beim auswerten des pfades vergessen. this[objekt + "1"] gibt es nie, dafür this[objekt + "_1"]

also im ganzen sähe das jetzt so aus:
ActionScript:
  1. MovieClip.prototype.unscharf = function (objekt, pixel) {
  2.     // objekt = Instanzname
  3.     // pixel = Wert um den das Bild verschobenwerden soll
  4.     //var nextDepth = this.getNextHighestDepth ();
  5.     var mc;
  6.     for (anzahl = 1; anzahl <= 8; anzahl++) {
  7.         duplicateMovieClip (this[objekt], objekt + "_" + anzahl, this.getNextHighestDepth ());
  8.         this[objekt + "_" + anzahl]._alpha = 12.5;
  9.     }
  10.     with (this[objekt + "_1"]) {
  11.         _y += pixel;
  12.     }
  13.     with (this[objekt + "_2"]) {
  14.         _x += pixel / 2;
  15.         _y += pixel / 2;
  16.     }
  17.     with (this[objekt + "_3"]) {
  18.         _x += pixel;
  19.     }
  20.     with (this[objekt + "_4"]) {
  21.         _x += pixel / 2;
  22.         _y -= pixel / 2;
  23.     }
  24.     with (this[objekt + "_5"]) {
  25.         _y -= pixel;
  26.     }
  27.     with (this[objekt + "_6"]) {
  28.         _x -= pixel / 2;
  29.         _y -= pixel / 2;
  30.     }
  31.     with (this[objekt + "_7"]) {
  32.         _x -= pixel;
  33.     }
  34.     with (this[objekt + "_8"]) {
  35.         _x -= pixel / 2;
  36.         _y += pixel / 2;
  37.     }
  38. };
  39. this.onLoad = function () {
  40.     this.unscharf ("bild", 5);
  41. };
finde den code und vor allem seine wirkung aber noch ziemlich schauerlich.
michael ist offline   Mit Zitat antworten
Alt 04-06-2005, 17:16   #3 (permalink)
Neuer User
 
Registriert seit: May 2005
Beiträge: 11
wo du grad schauerlich schreibst: ich habe die alphawerte vergessen.

so wie es dann aussehen soll habe ich schon "per Hand" ausprobiert. ich wollte das ganze eben jetzt mit AS versuchen zu realisieren.

und dank deiner hilfe ... siehts jetzt schön schauerlich unscharf aus



ActionScript:
  1. MovieClip.prototype.unscharf = function (objekt, pixel) {
  2.         // objekt = Instanzname
  3.         // pixel = Wert um den das Bild verschobenwerden soll
  4.         var mc;
  5.         for (anzahl = 1; anzahl <= 8; anzahl++) {
  6.                 duplicateMovieClip (this[objekt], objekt + "_" + anzahl, this.getNextHighestDepth ());
  7.               this[objekt + "_" + anzahl]._alpha = 30;
  8.         }
  9.         with (this[objekt + "_1"]) {
  10.                 _y += pixel;
  11.  
  12.         }
  13.         with (this[objekt + "_2"]) {
  14.                 _x += pixel / 2;
  15.                 _y += pixel / 2;
  16.  
  17.         }
  18.         with (this[objekt + "_3"]) {
  19.                 _x += pixel;
  20.  
  21.         }
  22.         with (this[objekt + "_4"]) {
  23.                 _x += pixel / 2;
  24.                 _y -= pixel / 2;
  25.  
  26.         }
  27.         with (this[objekt + "_5"]) {
  28.                 _y -= pixel;
  29.  
  30.         }
  31.         with (this[objekt + "_6"]) {
  32.                 _x -= pixel / 2;
  33.                 _y -= pixel / 2;
  34.  
  35.         }
  36.         with (this[objekt + "_7"]) {
  37.                 _x -= pixel;
  38.  
  39.         }
  40.         with (this[objekt + "_8"]) {
  41.                 _x -= pixel / 2;
  42.                 _y += pixel / 2;
  43.  
  44.         }
  45. };

Geändert von panzerfahrer (04-06-2005 um 17:54 Uhr)
panzerfahrer ist offline   Mit Zitat antworten
Alt 04-06-2005, 17:39   #4 (permalink)
nerdig working
 
Benutzerbild von michael
 
Registriert seit: Jul 2001
Ort: Hamburg
Beiträge: 5.832
warum hast du denn meinen alphavorschlag wieder auskommentiert und stattdessen in jedes with geschrieben?
michael ist offline   Mit Zitat antworten
Alt 04-06-2005, 17:46   #5 (permalink)
Neuer User
 
Registriert seit: May 2005
Beiträge: 11
edit: hast recht ich hätte es auch so lassen können

Geändert von panzerfahrer (04-06-2005 um 17:51 Uhr)
panzerfahrer ist offline   Mit Zitat antworten
Alt 04-06-2005, 17:49   #6 (permalink)
nerdig working
 
Benutzerbild von michael
 
Registriert seit: Jul 2001
Ort: Hamburg
Beiträge: 5.832
hö? also ob ich das nun gleich in der schleife mache oder hinterher einzeln zuweise macht doch keinen unterschied, nur das dein _alpha-wert ein anderer ist. wenn du statt 12.5 da 30 einträgst, sollte kein unterschied da sein.
michael ist offline   Mit Zitat antworten
Alt 04-06-2005, 18:07   #7 (permalink)
Neuer User
 
Registriert seit: May 2005
Beiträge: 11
ich nehme meine alpha-behauptung zurück

was anderes: kann ich die MCs, die ich mit duplicateMovieClip erstellt habe, anschließend noch irgendwie ansprechen? d.h. z.b. wieder zurück schieben (_x =0, _y=0)?

ich habs mit meiner funktion ausprobiert, aber die with-aktionen schlagen fehl.
panzerfahrer ist offline   Mit Zitat antworten
Alt 04-06-2005, 18:39   #8 (permalink)
nerdig working
 
Benutzerbild von michael
 
Registriert seit: Jul 2001
Ort: Hamburg
Beiträge: 5.832
wie versuchst du es denn "hinterher"?
michael ist offline   Mit Zitat antworten
Alt 04-06-2005, 18:45   #9 (permalink)
Neuer User
 
Registriert seit: May 2005
Beiträge: 11
ich hab die fkt. (versucht) zu erweitern:

ActionScript:
  1. MovieClip.prototype.unscharf = function (objekt, pixel, modus) {
  2.     // objekt = Instanzname
  3.     // pixel = Wert um den das Bild verschobenwerden soll
  4.         for (anzahl = 1; anzahl <= 8; anzahl++) {
  5.             duplicateMovieClip (this[objekt], objekt + "_" + anzahl, this.getNextHighestDepth ());
  6.             this[objekt + "_" + anzahl]._alpha = 30;
  7.         }
  8.     if (modus == true) {
  9.         with (this[objekt + "_1"]) {
  10.             _y += pixel;
  11.         }
  12. [B](...)[/B]
  13.     } else if (modus == false) {
  14.         with (this[objekt + "_1"]) {
  15.             _y -= pixel;
  16.         }
  17.         with (this[objekt + "_2"]) {
  18.             _x -= pixel / 2;
  19.             _y -= pixel / 2;
  20.         }
  21.         with (this[objekt + "_3"]) {
  22.             _x -= pixel;
  23.         }
  24.         with (this[objekt + "_4"]) {
  25.             _x -= pixel / 2;
  26.             _y += pixel / 2;
  27.         }
  28.         with (this[objekt + "_5"]) {
  29.             _y += pixel;
  30.         }
  31.         with (this[objekt + "_6"]) {
  32.             _x += pixel / 2;
  33.             _y += pixel / 2;
  34.         }
  35.         with (this[objekt + "_7"]) {
  36.             _x += pixel;
  37.         }
  38.         with (this[objekt + "_8"]) {
  39.             _x += pixel / 2;
  40.             _y -= pixel / 2;
  41.         }
  42.     }
  43. };
  44.  
  45. this.onLoad = function () {
  46.     this.unscharf ("bild1", 5, true);
  47.     this.unscharf ("bild2", 5, true);
  48. };
  49. bild1.onRollOver = function () {
  50.     this.unscharf ("bild1", 5, false);
  51.     this.unscharf ("bild2", 5, false);
  52. };

Geändert von panzerfahrer (04-06-2005 um 20:57 Uhr)
panzerfahrer ist offline   Mit Zitat antworten
Alt 04-06-2005, 20:56   #10 (permalink)
Neuer User
 
Registriert seit: May 2005
Beiträge: 11
ActionScript:
  1. [B](...)[/B]
  2.  
  3. } else if (modus == false) {
  4.         for (i in this) {
  5.             this[i].removeMovieClip ();
  6.         }
  7. [B](...)[/B]

damit gehts auch nicht
panzerfahrer ist offline   Mit Zitat antworten
Alt 06-06-2005, 13:53   #11 (permalink)
nerdig working
 
Benutzerbild von michael
 
Registriert seit: Jul 2001
Ort: Hamburg
Beiträge: 5.832
unabhängig von der funktion, zeigt dein this auf den falschen movieclip.

ActionScript:
  1. this.onLoad = function () {
  2.         //hier zeigt this auf die zeitleiste in der bild1 und bild2 liegen
  3.         this.unscharf ("bild1", 5, true);
  4.         this.unscharf ("bild2", 5, true);
  5. };
  6. bild1.onRollOver = function () {
  7.          //hier zeigt this auf bild1
  8.         this.unscharf ("bild1", 5, false);
  9.         this.unscharf ("bild2", 5, false);
  10. };

das this vor unscharf() ist das gleiche, wie das this innerhalb des Movieclip.prototype. deshalb sucht die funktion beim ausschalten in bild1 den movieclip bild1, was natürlich nicht geht.
michael 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 01:35 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele