Anzeige

[AS2] Button über die Hauptzeitleiste steuern

[AS2] - Button über die Hauptzeitleiste steuern | PSD-Tutorials.de

Erstellt von Jormungand, 19.02.2010.

  1. Jormungand

    Jormungand VonAllemEtwas

    Dabei seit:
    23.09.2008
    Beiträge:
    740
    Geschlecht:
    männlich
    Software:
    Adobe Creative Cloud, C4D R 11.5
    Kameratyp:
    Nikon D5000
    Button über die Hauptzeitleiste steuern
    Hi zusammen,
    das Thema wurde zwar in ähnlichen Formen schon hier behandelt, führte aber nicht zum gewünschten Ergebnis.

    Von der Haupzeitleiste würde ich gerne Buttons ansteuern, die innerhalb eines MC liegen.

    Ich habe bereits einige Versuche durchgeführt:
    Liegen die Buttons in der gleichen Ebene, wie das Script (also nicht in einem MC), funktionieren sie.
    Sobald ich die Buttons in einen MC stecke (z.B. "navi_mc") und die Pfade angleiche, geht nix mehr. Alle Symbole haben Instanznamen und sind sogar für Actionscript exportiert. Ich habe relative und absolute Pfade ausprobiert. Damit ich mich nicht verschreibe habe ich über "Zielpfad einfügen" die MCs angesteuert.

    Laut bad2b in diesem Thread müsste es aber gehen:
    http://www.psd-tutorials.de/modules/Forum/68_flash-allgemein/18403-button-mc.html

    Was kann ich denn noch probieren?

    PHP:
    1. // button1 wird in gleicher Ebene von AS angesteuert. Funktioniert!
    2.  
    3. button1.onRollOver = function(){
    4.     button1.gotoAndPlay("in");
    5. }
    6. button1.onRollOut = function(){
    7.     button1.gotoAndPlay("out");
    8. }
    9. button1.onRelease = function(){
    10.     _root.gotoAndStop("position1");
    11. }
    12.  
    13. // button2 liegt in navi_mc, wird relativ angesteuert. Geht nicht!
    14.  
    15. this.navi_mc.button2.onRollOver = function(){
    16.     button2.gotoAndPlay("in");
    17. }
    18. this.navi_mc.button2.onRollOut = function(){
    19.     button2.gotoAndPlay("out");
    20. }
    21. this.navi_mc.button2.onRelease = function(){
    22.     _root.gotoAndStop("position2");
    23. }
    24.  
    25. // button3 liegt in navi_mc, wird absolut angesteuert. Geht nicht!
    26.  
    27. _root.navi_mc.button3.onRollOver = function(){
    28.     button3.gotoAndPlay("in");
    29. }
    30. _root.navi_mc.button3.onRollOut = function(){
    31.     button3.gotoAndPlay("out");
    32. }
    33. _root.navi_mc.button3.onRelease = function(){
    34.     _root.gotoAndStop("position3");
    35. }
    Danke&Gruß
    Jormungand

    ________________________________________________

    Edit: Seit Tagen häng ich an dem Problem. Kaum mache ich einen Thread auf, finde ich die Lösung:
    Der Rollover und Rollout waren falsch. Auch hier muss der volle Pfad angegeben werden. Außerdem funktionieren Rollover und Rollout scheinbar nur mit absoluten Pfaden.


    Hier nochmal die Lösung:
    PHP:
    1.  
    2. _root.navi_mc.button3.onRollOver = function(){
    3.    _root.navi_mc.button3.gotoAndPlay("in");
    4. }
    5. _root.navi_mc.button3.onRollOut = function(){
    6.     _root.navi_mc.button3.gotoAndPlay("out");
    7. }
    8. _root.navi_mc.button3.onRelease = function(){
    9.     _root.gotoAndStop("position3");
    10. }
    Sorry, für die Umstände und danke, fürs Lesen.
     
    Zuletzt bearbeitet: 19.02.2010
    #1      
  2. h_seldon

    h_seldon Aktives Mitglied

    Dabei seit:
    13.09.2005
    Beiträge:
    338
    Geschlecht:
    männlich
    Ort:
    Nähe München
    Button über die Hauptzeitleiste steuern
    AW: Button über die Hauptzeitleiste steuern

    Hallo,

    Unter der Voraussetzung, daß button2 etc MCs sind, alle in navi_mc liegen und sich navi_mc auf _root befindet, lautet das Frame Script auf _root:

    PHP:
    1. navi_mc.button2.onRollOver = function(){
    2.    this.gotoAndPlay("in");
    3. }
    Der Bezug auf _root ist nicht nur überflüssig, sondern auch inflexibel. Wenn alle dasselbe tun sollen, kann man noch per Schleife vereinfachen.
     
    #2      
  3. TomJay66

    TomJay66 FlashFärber

    Dabei seit:
    14.07.2009
    Beiträge:
    16
    Geschlecht:
    männlich
    Ort:
    Wirsberg
    Software:
    Photoshop. Illustrator, Flash
    Kameratyp:
    Nikon D70s
    Button über die Hauptzeitleiste steuern
    AW: Button über die Hauptzeitleiste steuern

    Wenn du über "Pfad suchen" das entsprechende Element suchst, dann solltest du die Option "Absolute Pfade" verwenden. Und wenn du keine Elemente ausschließlich aus der Bibliothek verwendest, dann kannst du dir auch den Haken bei "Export für ActionScript" sparen.

    Dann würde der Pfad für dein Beispiel lauten (wenn dein Button innerhalb des navi_mc´s liegen):

    PHP:
    1.  
    2. navi_mc.button2.onRollOver = function(){
    3.      navi_mc.button2.gotoAndStop("in");
    4. }
    5.  
    Immer dran denken: wenn du einen MC innerhalb eines anderen MC´s ansprechen willst, dann solltest du einen absoluten Pfad verwenden. Immer von der obersten Ebene aus denken.

    Das "this" solltest du nicht unbedingt verwenden, wenn du mehrere MC´s auf der Bühne herumliegen hast. Ist ungefähr das selbe, wenn du in eine Gruppe Menschen ein "Hey, Du da" hineinrufst und eigentlich einen ganz bestimmten Menschen meinst. ;-)
     
    Zuletzt bearbeitet: 22.02.2010
    #3      
  4. TomJay66

    TomJay66 FlashFärber

    Dabei seit:
    14.07.2009
    Beiträge:
    16
    Geschlecht:
    männlich
    Ort:
    Wirsberg
    Software:
    Photoshop. Illustrator, Flash
    Kameratyp:
    Nikon D70s
    Button über die Hauptzeitleiste steuern
    AW: Button über die Hauptzeitleiste steuern

    Und so sollte das komplette Skript aussehen:

    Du wolltest mit deinem Pfad einen Button mit Namen button2 ansteuern, der in der ROOT-Ebene lag. Da aber dein Button innerhalb des Navi_MC´s liegt, konnte das Skript deinen Button nicht finden. Kleiner Fehler, große Ursache!
     
    Zuletzt bearbeitet: 22.02.2010
    #4      
  5. Jormungand

    Jormungand VonAllemEtwas

    Dabei seit:
    23.09.2008
    Beiträge:
    740
    Geschlecht:
    männlich
    Software:
    Adobe Creative Cloud, C4D R 11.5
    Kameratyp:
    Nikon D5000
    Button über die Hauptzeitleiste steuern
    AW: Button über die Hauptzeitleiste steuern

    Ich hätte auch gerne relative Pfade verwendet. Packe ich mein Projekt in einen MC, gehen mir alle absoluten Pfade flöten. Leider versteht Flash manchmal relative Pfade nicht.

    Gute Tipps! Dass Flash eine Vorliebe für absolute Pfade hat, habe ich verstanden.
    Bei this wird ja die aktuelle MC-Ebene bzw die Hauptzeitleistenebene angesprochen. Also müsste es nicht
    PHP:
    1. this.gotoAndPlay("in");
    heißen, sondern
    PHP:
    1. this.button2.gotoAndPlay("in");
    Auch wenn sich Flash im Lauf der Versionen gebessert haben soll - perfekt ist es nicht gerade.

    Danke für die Hinweise
    Grüße
    Jormungand
     
    #5      
  6. TomJay66

    TomJay66 FlashFärber

    Dabei seit:
    14.07.2009
    Beiträge:
    16
    Geschlecht:
    männlich
    Ort:
    Wirsberg
    Software:
    Photoshop. Illustrator, Flash
    Kameratyp:
    Nikon D70s
    Button über die Hauptzeitleiste steuern
    AW: Button über die Hauptzeitleiste steuern

    Wenn du ein Movieclip innerhalb eines anderen Movieclips ansprechen willst, musst du auf jeden Fall den genauen Pfad zu diesem MC schreiben.

    Wenn du wie in deinem Fall das MovieClip "button2", der innerhalb des MovieClips "navi_mc" liegt, ansprechen willst, musst du eben schreiben:


    Code (Text):
    1.  
    2. [B]navi_mc.button2[/B].onRelease = function(){
    3. //tue irgendwas
    4. }
    5.  

    Eindeutiger geht es wirklich nicht. Wenn du nur "this" in die Hauptzeitleiste schreibst, weiß Flash ja nicht, welchen MC du jetzt mit "this" genau meinst (gerade bei mehreren MC´s auf der Bühne). Du solltest dir auf jeden Fall angewöhnen, dass du die MC´s (und auch die eventuell darin enthaltenen MC´s) nur und ausschließlich mit ihrem Instanz-Namen ansprichst. Da kommst du auf keinen Fall in irgendwelche Kalamitäten und auch die Fehlersuche gestaltet sich wesentlich einfacher! ;)

    Bei einfacheren Projekten mag das VIELLEICHT (!!!!) noch funktionieren, aber spätestens, wenn du mit externen und dynamischen Geschichten (z. B. XML, externe SWF´s o. ä.) arbeitest, geht das aber sowas von schief!
     
    #6      
  7. h_seldon

    h_seldon Aktives Mitglied

    Dabei seit:
    13.09.2005
    Beiträge:
    338
    Geschlecht:
    männlich
    Ort:
    Nähe München
    Button über die Hauptzeitleiste steuern
    AW: Button über die Hauptzeitleiste steuern

    Hallo,

    Ein absoluter Pfad nimmt in Flash immer Bezug auf das Wurzelelement, nämlich die Hauptzeitleiste bzw. _root. Ein relativer Pfad dagegen geht von dem aktivierten Element aus und bewegt sich in der Objekthierarchie nach oben (this._parent) oder nach unten (this.instanzname). Der relative Pfad bietet mehr Flexibilität und vermeidet Probleme etwa beim Verwenden von loadMovie (wenn die aktuelle Datei in eine andere geladen wird).

    Annahme: auf _root liegt ein mc (nav_mc), innerhalb dessen mehrere mcs mit den Instanznamen button1, button2, button3 etc liegen. Wenn ein RollOver über eines dieser Objekte erfolgt, soll das aktivierte Objekt zu einem bestimmten Frame gehen und dort eine Animation abspielen. Frame script _root (es gibt keine Objektskripte und keine anderen Frame Skripte):

    Absoluter Pfad:

    PHP:
    1. _root.nav_mc.button1.onRollOver = function(){
    2.     _root.nav_mc.button1.gotoAndPlay("in");
    3. }
    Die Zuweisung des Ereignisses erfolgt per absolutem Pfad: _root.button1.onRollOver. Das gleiche gilt für die anonyme Funktion, in der ebenfalls ein absoluter Pfad verwendet wird: _root.button1.gotoAndPlay.

    Ein relativer Pfad verzichtet auf die Angabe des obersten Elements, z.B.:

    PHP:
    1. nav_mc.button1.onRollOver = function(){
    2.     this.gotoAndPlay("in");
    3. }
    Oder:

    PHP:
    1. this.nav_mc.button1.onRollOver = function(){
    2.     this.gotoAndPlay("in");
    3. }
    Da wir uns auf _root befinden und von dort aus den relativen Pfad verwenden, ist er prinzipiell identisch mit dem absoluten Pfad (es gibt kein _root übergeordnetes Element). Innerhalb der angesprochenen Objekte sieht die Sache anders aus: dort geht der relative Pfad vom aktivierten Objekt aus (this) und verzichtet auf jeden Bezug zur Hauptzeitleiste. Zu den Vorteilen dieser Vorgehensweise zählen:

    - wenn sich der Name der buttons ändert (z.B. in: bService, bProdukte etc), dann müssen pro Objekt erheblich weniger Änderungen vorgenommen werden als wenn alles mit Bezug zu _root definiert wäre.
    - die unten gewählte Kurzform funktioniert mit absoluter Adressierung so nicht (da müssten einige weitere Zeilen hinzu kommen)
    - wenn die aktuelle Datei per loadMovie in eine andere geladen wird, funktioniert kein einziges Skript mehr bei absoluter Adressierung, bei relativer dagegen schon.

    Im aktuellen Beispiel könnte das zugehörige Skript vereinfacht lauten:

    PHP:
    1. var nBtnNum:Number = 3;
    2. var mBtn:MovieClip;
    3. for (var i:Number = 1; i <= nBtnNum; i++){
    4.     mBtn = this.nav_mc["button"+i];
    5.     mBtn.stop();
    6.     mBtn.onRollOver = btnIn;
    7.     mBtn.onRollOut = btnOut;
    8.     mBtn.onPress = btnPress;
    9. }
    10. function btnIn(){
    11.     this.gotoAndPlay("in");
    12. }
    Alternativ lässt sich der Inhalt von nav_mc automatisch auslesen oder ein Array erfasst die BtnNamen etc.
     
    #7      
  8. 4uwak

    4uwak WEB?ViDEO?FOTO and more

    Dabei seit:
    16.11.2008
    Beiträge:
    349
    Geschlecht:
    männlich
    Software:
    mehr als 10% des Gehirns und Adobe Master Collection
    Kameratyp:
    Sony DSC-H5
    Button über die Hauptzeitleiste steuern
    AW: Button über die Hauptzeitleiste steuern

    also arbeite mit _parent dann bist du viel flexiebler und kannst es dann auch viel mehr ineinanderverschachteln und somit bist du auch von root unabhänig und kannst es dann auch immer wieder verwenden.

    Gruß Super4uwak
     
    #8      
Seobility SEO Tool
x
×
×