Antworten auf deine Fragen:
Neues Thema erstellen

Button über die Hauptzeitleiste steuern

Jormungand

VonAllemEtwas

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:


Was kann ich denn noch probieren?

PHP:
// button1 wird in gleicher Ebene von AS angesteuert. Funktioniert!

button1.onRollOver = function(){
    button1.gotoAndPlay("in");
}
button1.onRollOut = function(){
    button1.gotoAndPlay("out");
}
button1.onRelease = function(){
    _root.gotoAndStop("position1");
}

// button2 liegt in navi_mc, wird relativ angesteuert. Geht nicht!

this.navi_mc.button2.onRollOver = function(){
    button2.gotoAndPlay("in");
}
this.navi_mc.button2.onRollOut = function(){
    button2.gotoAndPlay("out");
}
this.navi_mc.button2.onRelease = function(){
    _root.gotoAndStop("position2");
}

// button3 liegt in navi_mc, wird absolut angesteuert. Geht nicht!

_root.navi_mc.button3.onRollOver = function(){
    button3.gotoAndPlay("in");
}
_root.navi_mc.button3.onRollOut = function(){
    button3.gotoAndPlay("out");
}
_root.navi_mc.button3.onRelease = function(){
    _root.gotoAndStop("position3");
}
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:
_root.navi_mc.button3.onRollOver = function(){
   _root.navi_mc.button3.gotoAndPlay("in");
}
_root.navi_mc.button3.onRollOut = function(){
    _root.navi_mc.button3.gotoAndPlay("out");
}
_root.navi_mc.button3.onRelease = function(){
    _root.gotoAndStop("position3");
}
Sorry, für die Umstände und danke, fürs Lesen.
 
Zuletzt bearbeitet:

h_seldon

Aktives Mitglied

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:
navi_mc.button2.onRollOver = function(){
   this.gotoAndPlay("in");
}

Der Bezug auf _root ist nicht nur überflüssig, sondern auch inflexibel. Wenn alle dasselbe tun sollen, kann man noch per Schleife vereinfachen.
 

TomJay66

FlashFärber

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:
navi_mc.button2.onRollOver = function(){
     navi_mc.button2.gotoAndStop("in");
}

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:

TomJay66

FlashFärber

AW: Button über die Hauptzeitleiste steuern

Und so sollte das komplette Skript aussehen:

PHP:
// button1 wird in gleicher Ebene von AS angesteuert. Funktioniert!
 
button1.onRollOver = function(){
    button1.gotoAndPlay("in");
}
button1.onRollOut = function(){
    button1.gotoAndPlay("out");
}
button1.onRelease = function(){
    _root.gotoAndStop("position1");
}
 
// button2 liegt in navi_mc, wird relativ angesteuert. Geht nicht!
 
navi_mc.button2.onRollOver = function(){
    navi_mc.button2.gotoAndPlay("in"); //da hattest du den falschen Pfad
}
navi_mc.button2.onRollOut = function(){
   navi_mc.button2.gotoAndPlay("out");//hier ebenso
}
navi_mc.button2.onRelease = function(){
    _root.gotoAndStop("position2");
}
 
// button3 liegt in navi_mc, wird absolut angesteuert. Geht nicht!
 
_root.navi_mc.button3.onRollOver = function(){
    navi_mc.button3.gotoAndPlay("in");
}
_root.navi_mc.button3.onRollOut = function(){
    navi_mc.button3.gotoAndPlay("out");
}
_root.navi_mc.button3.onRelease = function(){
    _root.gotoAndStop("position3");
}

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:

Jormungand

VonAllemEtwas

AW: Button über die Hauptzeitleiste steuern

Der Bezug auf _root ist nicht nur überflüssig, sondern auch inflexibel.
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.

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. ;-)
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:
this.gotoAndPlay("in");
heißen, sondern
PHP:
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
 

TomJay66

FlashFärber

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:
[B]navi_mc.button2[/B].onRelease = function(){
//tue irgendwas
}


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!
 

h_seldon

Aktives Mitglied

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:
_root.nav_mc.button1.onRollOver = function(){
    _root.nav_mc.button1.gotoAndPlay("in");
}

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:
nav_mc.button1.onRollOver = function(){
    this.gotoAndPlay("in");
}

Oder:

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

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:
var nBtnNum:Number = 3;
var mBtn:MovieClip;
for (var i:Number = 1; i <= nBtnNum; i++){
	mBtn = this.nav_mc["button"+i];
	mBtn.stop();
	mBtn.onRollOver = btnIn;
	mBtn.onRollOut = btnOut;
	mBtn.onPress = btnPress;
}
function btnIn(){
	this.gotoAndPlay("in");
}

Alternativ lässt sich der Inhalt von nav_mc automatisch auslesen oder ein Array erfasst die BtnNamen etc.
 

4uwak

WEB?ViDEO?FOTO and more

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
 
Bilder bitte hier hochladen und danach über das Bild-Icon (Direktlink vorher kopieren) platzieren.
Antworten auf deine Fragen:
Neues Thema erstellen

Willkommen auf PSD-Tutorials.de

In unseren Foren vernetzt du dich mit anderen Personen, um dich rund um die Themen Fotografie, Grafik, Gestaltung, Bildbearbeitung und 3D auszutauschen. Außerdem schalten wir für dich regelmäßig kostenlose Inhalte frei. Liebe Grüße senden dir die PSD-Gründer Stefan und Matthias Petri aus Waren an der Müritz. Hier erfährst du mehr über uns.

Stefan und Matthias Petri von PSD-Tutorials.de

Nächster neuer Gratisinhalt

03
Stunden
:
:
25
Minuten
:
:
19
Sekunden

Neueste Themen & Antworten

Flatrate für Tutorials, Assets, Vorlagen

Zurzeit aktive Besucher

Statistik des Forums

Themen
118.619
Beiträge
1.538.363
Mitglieder
67.540
Neuestes Mitglied
Alex Weidner
Oben