Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 24-11-2004, 22:17   #1 (permalink)
Neuer User
 
Registriert seit: May 2004
Ort: München
Beiträge: 30
Bild in Button laden (Instanzbennung funktioniert nicht)

Ich möcht gerne in einen Button dynamisch Bilder hereinladen.
Vom Aufbau her habe ich im "Auf" Frame einen Movieclip, in dem ein weiterer Movieclip liegt.
Wenn ich nun beide Movielclips (unterschiedlich) benenne, wird mir in der Objektausgabe (Debugger - Objekte auflisten) zwar der Button selbst und der "innerste" Movieclip mit Namen angezeigt, aber der Movielclip, in den der zweite Movieclip enthalten ist, bekommt keinen Namen, sondern heißt instanzXY

Es sieht also z.B. so aus:
btn_test.instanz1.mc_thumb1


Außerdem verwende ich den mc_thumb1 Movieclip mit selben Namen nochmal im "Drücken" Frame und dort wird soetwas angezeigt:
btn_test.instanz1

Wichtig: Die "mittlere" Instanz(hier 1) bleibt identisch.
Es wird also anscheinend kein Unterschied zwischen "Auf", "Drücken", "Aktiv" usw. gemacht, auch wenn dort verschiedene Movieclips sind.
Flash zeigt also quasie nur einen Bruchteil der enthaltenen Movieclips an.

Es bekommen also alle Movieclips in der zweiten Ebene keinen Namen, obwohl ich ihn angegeben habe.

Hattet ihr vielleicht schon mal das Problem und wisst eine Lösung oder habt ihr irgendwo tiefergehender Informationen zur Instanzbennenung von Buttons?
Macromedia ist ja wie immer seeehr spärlich mit Informationen.


Hinweis zum Anhang:
Ich habe hier die ganze Geschichte einmal in ein eigenes Movie gepackt.
Wenn ihr das ganze laufen lasst und per Fehlersuche / Debugger die Objekte auflisten lasst, erscheint das hier:
Code:
Stufe #0: Bild=1
  Schaltfläche: Ziel="_level0.btn_test"
    Movieclip: Bild=1 Ziel="_level0.btn_test.instance1"
      Movieclip: Bild=1 Ziel="_level0.btn_test.instance1.mc_level3"
obwohl sämtliche Movieclips im Button benannt sind.

Mein Ziel ist es, daß etwas wie:
Code:
    Movieclip: Bild=1 Ziel="_level0.btn_test.mc_level2"
      Movieclip: Bild=1 Ziel="_level0.btn_test.mc_level.mc_level3"
ausgegeben wird.
Ich muss auf mc_level3 zugreifen, um dort ein Bild hineinzuladen.
Angehängte Dateien
Dateityp: zip btn_instance_test.zip (3,2 KB, 4x aufgerufen)
storycreator ist offline   Mit Zitat antworten
Alt 25-11-2004, 08:42   #2 (permalink)
agedoubleju
Gast
 
Beiträge: n/a
In Buttons kannst du nichts mehr nachladen, dafür gibt es ja die MCs. Und einen dritten Level benötigst du sicher auch nicht, der Level 0 mit seinen Millionen von Tiefen(-Ebenen) wird sicher ausreichen...
  Mit Zitat antworten
Alt 25-11-2004, 14:13   #3 (permalink)
Neuer User
 
Registriert seit: May 2004
Ort: München
Beiträge: 30
Zitat:
Zitat von agedoubleju
In Buttons kannst du nichts mehr nachladen, dafür gibt es ja die MCs. Und einen dritten Level benötigst du sicher auch nicht, der Level 0 mit seinen Millionen von Tiefen(-Ebenen) wird sicher ausreichen...
hmm...
Ich möchte in die unterschiedlichen Frames eines Buttons (also "Auf "Darüber" usw.) Bilder hineinladen, darf ich jetzt deiner Antwort entnehmen, daß dies auf keinen Weg möglich ist?
Ich meine ich habe in den einzelnen Frames ja Movieclips mit eigenem Namen und in diese Movieclips möchte ich quasi etwas hineinladen.

Ich verstehe nicht, was "dafür gibt es ja die MCs" heißen soll, wenn ich an beschriebener Stelle nicht auf meinen MC zugreifen kann.
Und mit dem Level3 Meine ich eben auch die Frames eines Buttons.
Kann ich ja nichts dafür, wenn sie nicht auf level0 liegen...
storycreator ist offline   Mit Zitat antworten
Alt 25-11-2004, 16:19   #4 (permalink)
agedoubleju
Gast
 
Beiträge: n/a
Ich vermute mal, dass du den grundlegenden Aufbau von Flash noch nicht ganz verstanden hast...

Wenn du dynamische Elemente einer Schaltfläche zufügen willst, kannst du statt eines Button auch einen MC nehmen. Ein MC besitzt die gleichen Methoden eines Button, aber darüberhinaus eben noch ein paar mehr. Du kannst in dem MC bspw. drei Schlüsselframes setzen, jeweils mit einer stop-Aktion. Den Frames gibst du die Bildnamen "_up", "_over" und "_down", dann funzen die schon mal (auch ohne Script) wie ein Button, d.h. bei Mausover- und Mausklick-Events werden andere Zustände gezeigt.

Und in einen MC kannst du dynamisch per loadMovie Bilder nachladen, dazu solltest du in dem MC aber weitere MCs z.B . mit createEmptyMovieClip anlegen. Diese MCs kann man dann wie einen "Bilderrahmen" nutzen...

Da diese MCs alle noch auf Level 0 liegen, benötigst du keine weiteren Level. Mit einem createEmptyMovieClip oder auch mit attachMovie/duplicateMovieClip werden MCs auf bestimmte Tiefen der Hauptzeitleiste, bzw. eines Container-MCs gelegt. Mit swapDepths kann man diese Tiefe, falls gewünscht, später beeinflussen.

Um dir noch einmal die Ebenenhierarchie in Flash zusammenzufassen: auf der Hauptzeitleiste/_root/_level0 liegt die Bühnen mit Ebenen, diese Ebenen liegen auf Tiefen ab -16384, jede neue Ebene geht in Richtung 0, also -16383, -16382 etc. Diese Ebenen sind allerdings statisch, d.h. du kannst MCs, die auf diesen Ebenen liegen, zur Laufzeit nicht removen/löschen. Das geht nur mit MCs, die auf den dynamischen Tiefen ab Tiefe 0 liegen.

Jeder MC bringt noch einmal wieder seine eigenen Tiefen mit, d.h. ein MC kann auf der Tiefe 100 der Hauptzeitleiste liegen, ein weiterer in dem MC eingebetteter MC kann auf Tiefe 20 des MCs liegen.

Und weil das anscheinend alles nicht ausreicht, hat MM noch weitere Level zugelassen, jeder weitere Level liegt "über" dem Level 0, hat seine eigenen Tiefen, kann seine eigenen MC mit wieder eigenen MCs auf eigenen Ebenen haben usw. *schwitz*

Da der Level 0 ausreichend Tiefen hat, benötigt man bei geschickter Programmierung also eigentlich nie andere Level. Ganz im Gegenteil: du kannst z.B. einen MC aus Level1 auf Tiefe 10 nie "unter" einen MC auf Tiefe 1000 aus Level 0 schieben, weil eben der ganze Level 1 "über" Level0 liegt.

Hoffe, das war jetzt eindeutiger...
  Mit Zitat antworten
Alt 25-11-2004, 22:35   #5 (permalink)
Neuer User
 
Registriert seit: May 2004
Ort: München
Beiträge: 30
Zitat:
Zitat von agedoubleju
Ich vermute mal, dass du den grundlegenden Aufbau von Flash noch nicht ganz verstanden hast...

Wenn du dynamische Elemente einer Schaltfläche zufügen willst, kannst du statt eines Button auch einen MC nehmen. Ein MC besitzt die gleichen Methoden eines Button, aber darüberhinaus eben noch ein paar mehr. Du kannst in dem MC bspw. drei Schlüsselframes setzen, jeweils mit einer stop-Aktion. Den Frames gibst du die Bildnamen "_up", "_over" und "_down", dann funzen die schon mal (auch ohne Script) wie ein Button, d.h. bei Mausover- und Mausklick-Events werden andere Zustände gezeigt.

Und in einen MC kannst du dynamisch per loadMovie Bilder nachladen, dazu solltest du in dem MC aber weitere MCs z.B . mit createEmptyMovieClip anlegen. Diese MCs kann man dann wie einen "Bilderrahmen" nutzen...

Da diese MCs alle noch auf Level 0 liegen, benötigst du keine weiteren Level. Mit einem createEmptyMovieClip oder auch mit attachMovie/duplicateMovieClip werden MCs auf bestimmte Tiefen der Hauptzeitleiste, bzw. eines Container-MCs gelegt. Mit swapDepths kann man diese Tiefe, falls gewünscht, später beeinflussen.

Um dir noch einmal die Ebenenhierarchie in Flash zusammenzufassen: auf der Hauptzeitleiste/_root/_level0 liegt die Bühnen mit Ebenen, diese Ebenen liegen auf Tiefen ab -16384, jede neue Ebene geht in Richtung 0, also -16383, -16382 etc. Diese Ebenen sind allerdings statisch, d.h. du kannst MCs, die auf diesen Ebenen liegen, zur Laufzeit nicht removen/löschen. Das geht nur mit MCs, die auf den dynamischen Tiefen ab Tiefe 0 liegen.

Jeder MC bringt noch einmal wieder seine eigenen Tiefen mit, d.h. ein MC kann auf der Tiefe 100 der Hauptzeitleiste liegen, ein weiterer in dem MC eingebetteter MC kann auf Tiefe 20 des MCs liegen.

Und weil das anscheinend alles nicht ausreicht, hat MM noch weitere Level zugelassen, jeder weitere Level liegt "über" dem Level 0, hat seine eigenen Tiefen, kann seine eigenen MC mit wieder eigenen MCs auf eigenen Ebenen haben usw. *schwitz*

Da der Level 0 ausreichend Tiefen hat, benötigt man bei geschickter Programmierung also eigentlich nie andere Level. Ganz im Gegenteil: du kannst z.B. einen MC aus Level1 auf Tiefe 10 nie "unter" einen MC auf Tiefe 1000 aus Level 0 schieben, weil eben der ganze Level 1 "über" Level0 liegt.

Hoffe, das war jetzt eindeutiger...

Danke für die ausführliche Erklärung.
Daß man einen Movieclip auf diese Art und Weise als einem Button benutzen kann, war mir tatsächlich nicht bekannt.
Woher bekommt man derartige Informationen? Die Macromedia Dokumentation ist wie gesagt mehr als spärlich und die Bücher, die ich besitze sagen zu diesem Thema auch nichts tiefergehendes.

Wie dem auch sei.
Ich kann also meine Buttons durch normale Movieclips ersetzen, in denen ich einfach entsprechende Schlüsselframes mit "_up", "_over", "_down" betitele?
Wie heißt das vierte Frame? "_active" ?

Noch etwas zu den Leveln:
Offensichtlich habe ich die Bedeutung von Leveln mit Ebene verwechselt.
Ich meinte zumindest, daß ich auf die tieferen Ebenen eine Buttons zugreifen wollte - was sich aber hiermit dann wohl erledigt hat.


Also:
Besten Dank für deine umfangreiche Erklärung und bitte, bitte, verrate mir, wo man derartige Informationen herbekommt.


NACHTRAG:
Ich habe das beschriebene jetzt einmal ausprobiert, aber die Umsetzung scheitert schon an den "stop();" Befehlen.
Ich muß ja erst ein Frame auswählen und dann einen Movieclip in dem Frame auswählen, um sie zu setzen. In den Frame selbst kann ich sie ja leider nicht schreiben.
Nun auf jeden Fall habe ich die Markierungen und Stops wie beschrieben gesetzt und ich bekomme die Fehlermeldung:
Code:
Symbol=btn_test, Ebene=Ebene 1, Bild=1: Zeile 1: Anweisung muss innerhalb einer on/onClipEvent-Prozedur vorliegen
     stop();

Symbol=btn_test, Ebene=Ebene 1, Bild=2: Zeile 1: Anweisung muss innerhalb einer on/onClipEvent-Prozedur vorliegen
     stop();
Aber was für einen Sinn macht es eine Stop Funktion für einen onClipEvent wie z.B. on (press) aufzurufen?

Geändert von storycreator (25-11-2004 um 22:49 Uhr)
storycreator ist offline   Mit Zitat antworten
Alt 25-11-2004, 23:12   #6 (permalink)
agedoubleju
Gast
 
Beiträge: n/a
Zitat:
bitte, verrate mir, wo man derartige Informationen herbekommt.
Viel viel lesen...

Zitat:
Ich muß ja erst ein Frame auswählen und dann einen Movieclip in dem Frame auswählen, um sie zu setzen
Nö. Du musst einen MC erstellen und in diesen MC die Frames setzen. Das hat nichts damit zu tun, wo der MC selbst liegt. Einen "active"-Frame benötigst du normalerweise nicht, weil der ganze MC sofort aktiv ist, sobald du einen Zeitleisten-Event setzt, also z.B. onRelease, onPress etc. Wenn du allerdings nur Text in deinem MC hast, wird der Mauszeiger nur über dem Text selbst zur "Hand", in den "Zwischenräumen" wird er wieder zum normalen "Pfeil". Das sieht dann meist etwas unschön aus und kann umgangen werden, indem man z.B. einen Rechteck-MC mit einem Alpha von 0 als unterste Ebene in diesen MC setzt.

Und verschone mich bitte mit Clipevents, du solltest deine Scripte alle auf die Hauptzeitleiste legen, sonst musst du ja ständig bei der Scriptsuche erst den MC anwählen. Beispiel:
ActionScript:
  1. //der MC bekommt im Eigenschaftenbedienfeld den Instanznamen meinMC und folgendes Script auf die Hauptzeitleiste
  2. this.meinMC.onRelease = function(){//nach Klick und Loslassen
  3.    //tu etwas, z.B. this._x = 100 -> positioniert diesen MC auf die X-Position 100
  4. }

Geändert von agedoubleju (25-11-2004 um 23:15 Uhr)
  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 20:37 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele