Zurück   Flashforum > Flash > ActionScript > ActionScript 2

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 22-10-2011, 01:11   #1 (permalink)
Balkan Boris
 
Benutzerbild von marconi
 
Registriert seit: Mar 2007
Beiträge: 283
width von dynamischen Menü ermitteln

Ciao Leute,

ich komm hier einfach nicht mehr weiter und bräuchte mal einen Tip von Euch:

Ich habe ein dynamisches Menü das seine Buttons über eine xml bezieht. Das Menü an sich funktioniert
wunderbar und habe es mir soweit auch zu meinen Zwecken editieren können.

Nun möchte ich dem Menü noch einen Rahmen geben der sich auch dynamisch der Menübreite anpasst.
Der Rahmen besteht aus drei Teilen (da abgerundete Ecken): linker Teil ist fix, mittlerer Teil soll sich
der Breite anpassen und rechter Teil verschiebt sich an das Ende.

Um den Rahmen nun anzupassen benötige ich ja die aktuelle Breite des gesamten Menüs und genau
diese finde ich einfach nicht heraus.
Das Menü liegt in einem Movieclip dessen Breite mir aber mit 0 angegeben wird. Ich denke ich muss
die Breite aller Buttons "mainMenu["mainBtn"+(i-1)]" addieren, aber mir fehlt der richtige Ansatz der
mir mal ein Ergebnis zeigt.

Ich habe mir schon ein paar weitere Menüs angesehen und bemerkt, dass die Breite wohl nicht einfach mit "menu._width" zu ermitteln ist.

Scriptauszug:
PHP-Code:
// this function creates the menu
function buildMenu() {
    
// position menu
    
mainMenu._x mainX;
    
mainMenu._y mainY;
    
// our xml star point
    
folder menuXml.childNodes[1].childNodes;
    var 
i:Number;
    for (
i=0i<folder.lengthi++) {
        
// attach mainBtn from the libray 
        
var mainBtn:MovieClip mainMenu.attachMovie("mainBtn""mainBtn"+ii);
        
// get xml attributes
        
mainBtn.btnName.text folder[i].attributes.NAME;
        
mainBtn.link folder[i].attributes.LINK;
        
mainBtn.desc folder[i].attributes.DESCRIPTION;
        
mainBtn.linkType folder[i].attributes.TYPE;
        
// create and ID for each button 
        
mainBtn.ID i;
        
// attach a description text field for each button
        
mainBtn.des mainBtn.attachMovie("des""des"+ii+1500);
//        mainBtn.des._x = mainBtn.btnName._x + mainBtn.btnName.textWidth + 10;
        
mainBtn.des._alpha 0;
        
mainBtn.btnName.autoSize "left";
        
mainBtn.des.t.autoSize "left";
        
// scale button background to fit length of text and padding
        
mainBtn.initWidth mainBtn._width+Number(mainPadding)*2;
        
mainBtn.bg._width mainBtn.initWidth;
        
// position buttons next to each other 
        
mainBtn._x += mainMenu["mainBtn"+(i-1)]._x+mainMenu["mainBtn"+(i-1)]._width+Number(mainSpacing);
        
mainBtn.btnName._x += Number(mainPadding);
        
// create xPos var to use in tweens 
        
mainBtn.xPos mainBtn._x;
        
// set defualt colors
        
mainBtn.btnName.textColor mainTextColor;
        
TweenMax.to(mainBtn.bg0, {tint:buttonBgColor});
        
// attach mask mc and scale to button width
        
mainBtn.mask mainBtn.attachMovie("mask""mask"+ii+500);
        
mainBtn.mask._height mainBtn.bg._height;
        
mainBtn.mask._width mainBtn.bg._width;
        
mainBtn.setMask(mainBtn.mask);
        
// set default page
        
if (== (defaultPage-1)) {
            
activeMain mainBtn;
            
// tween button to active color
            
TweenMax.to(mainBtn.btnName0, {tint:mainTextColorActive});
            
// load link
            
if (mainBtn.linkType == "link") {
                if (
openLinks == "blank") {
                    
getURL(mainBtn.link"_blank");
                } else {
                    
getURL(mainBtn.link"_self");
                }
            } else {
                
customFunc(mainBtn.link);
            }
        } 
__________________
Unbekannt verzogen (Heute um 03:44 Uhr)

Geändert von marconi (22-10-2011 um 21:41 Uhr)
marconi ist offline   Mit Zitat antworten
Alt 22-10-2011, 17:46   #2 (permalink)
Flash-Designer
 
Benutzerbild von Martin Kraft
 
Registriert seit: May 2006
Ort: Wiesbaden
Beiträge: 6.162
Zitat:
Zitat von marconi Beitrag anzeigen
Ich habe mir schon ein paar weitere Menüs angesehen und bemerkt, dass die Breite wohl nicht einfach mit "menu._width" zu ermitteln ist.
Doch, eigentlich schon Die Breite eines MovieClips entspricht eigentlich immer der Breite seiner Inhalte, zum Zeitpunkt der Abfrage...

An welcher Stelle greifst Du denn wie auf die Breite zu?

P.S.: Kann es sein, dass Dein Problem daran liegt, dass Du einfach nicht die Schriften eingebettet hast?
__________________
Viele Grüße // Martin

Martin Kraft // Interaktionsdesign

Hilfreiche Websites:
// Hilfe zur Adobe Flash Plattform
// ActionScript 2 Referenz
// ActionScript 3 Referenz
// ActionScript 3 Arbeitshandbuch
// weitere Flash Ressourcen

Bitte keine Flashfragen per PM oder Profilnachricht! Dafür ist das Forum da!

Geändert von Martin Kraft (22-10-2011 um 17:50 Uhr)
Martin Kraft ist offline   Mit Zitat antworten
Alt 22-10-2011, 18:29   #3 (permalink)
Balkan Boris
 
Benutzerbild von marconi
 
Registriert seit: Mar 2007
Beiträge: 283
Zitat:
An welcher Stelle greifst Du denn wie auf die Breite zu?
Von _root aus und wenn ich mir das ausgeben lasse kommt null raus:
PHP-Code:
    trace(menu_mc._width); 
Zitat:
P.S.: Kann es sein, dass Dein Problem daran liegt, dass Du einfach nicht die Schriften eingebettet hast?
Schriften liegen in der Bibliothek.

Interessant ist: wenn ich
PHP-Code:
    trace(mainMenu._width); 
direkt in die function buildMenu() (Scriptauszug) schreibe gibt er mir 4 Zahlen aus:
44
86
164
239
Das scheinen die jeweiligen x-Werte der Buttons zu sein.

Mich verwirrt das alles.
__________________
Unbekannt verzogen (Heute um 03:44 Uhr)
marconi ist offline   Mit Zitat antworten
Alt 22-10-2011, 18:46   #4 (permalink)
Flash-Designer
 
Benutzerbild von Martin Kraft
 
Registriert seit: May 2006
Ort: Wiesbaden
Beiträge: 6.162
Zitat:
Zitat von marconi Beitrag anzeigen
Interessant ist: wenn ich
PHP-Code:
    trace(mainMenu._width); 
direkt in die function buildMenu() (Scriptauszug) schreibe gibt er mir 4 Zahlen aus:
44
86
164
239
Das scheinen die jeweiligen x-Werte der Buttons zu sein.
Nein, das ist die dann aktuelle Breite des Menus!

Eben das meint ich mit »wann« Wenn Du Dir die Breite ausgeben lässt, bevor Du das Menu befüllt hast, ist sie natürlich 0. Greifst Du hingegen nach der Ausführung von buildMenu darauf zu, sollte sie der Gesamtbreite aller Buttons entsprechen.
__________________
Viele Grüße // Martin

Martin Kraft // Interaktionsdesign

Hilfreiche Websites:
// Hilfe zur Adobe Flash Plattform
// ActionScript 2 Referenz
// ActionScript 3 Referenz
// ActionScript 3 Arbeitshandbuch
// weitere Flash Ressourcen

Bitte keine Flashfragen per PM oder Profilnachricht! Dafür ist das Forum da!
Martin Kraft ist offline   Mit Zitat antworten
Alt 22-10-2011, 19:00   #5 (permalink)
Balkan Boris
 
Benutzerbild von marconi
 
Registriert seit: Mar 2007
Beiträge: 283
Zitat:
Wenn Du Dir die Breite ausgeben lässt, bevor Du das Menu befüllt hast, ist sie natürlich 0.
Alles klar, das leuchtet mir ein!

Jetzt stellt sich mir aber die Frage wie ich mit den 4 Werten umgehe. Hab gerade mal das Menü manuell nachgemessen und ich komm da auf circa 330 in der Breite.

Und da ich ja die Breite im _root benötige, müsste ich den Wert dann irgendwie übermitteln?
__________________
Unbekannt verzogen (Heute um 03:44 Uhr)
marconi ist offline   Mit Zitat antworten
Alt 22-10-2011, 19:22   #6 (permalink)
Balkan Boris
 
Benutzerbild von marconi
 
Registriert seit: Mar 2007
Beiträge: 283
So, hab den trace versetzt und die letzte Zahl scheint nun zu stimmen:

86
164
239
331

Scheint wohl so zu sein:

btn_1._width
btn_1._width + btn_2._width
btn_1._width + btn_2._width + btn_3._width
btn_1._width + btn_2._width + btn_3._width + btn_4._width

Wie reduziere ich das jetzt auf den letzten Wert und speichere ihn um ihn im _root zu verwenden?
__________________
Unbekannt verzogen (Heute um 03:44 Uhr)
marconi ist offline   Mit Zitat antworten
Alt 22-10-2011, 20:29   #7 (permalink)
Flash-Designer
 
Benutzerbild von Martin Kraft
 
Registriert seit: May 2006
Ort: Wiesbaden
Beiträge: 6.162
Du gehst das falschrum an. Es geht nicht darum, wo Du auf die Breite zugreifst, sondern wann!

Irgendwo wird doch buildMenu aufgerufen. Und erst wenn das geschehen ist, kannst Du die Breite des Menüs auslesen:
PHP-Code:
trace(mainMenu._width); // -> 0;
buildMenu();
trace(mainMenu._width); // -> Deine Breite; 
__________________
Viele Grüße // Martin

Martin Kraft // Interaktionsdesign

Hilfreiche Websites:
// Hilfe zur Adobe Flash Plattform
// ActionScript 2 Referenz
// ActionScript 3 Referenz
// ActionScript 3 Arbeitshandbuch
// weitere Flash Ressourcen

Bitte keine Flashfragen per PM oder Profilnachricht! Dafür ist das Forum da!

Geändert von Martin Kraft (22-10-2011 um 20:55 Uhr)
Martin Kraft ist offline   Mit Zitat antworten
Alt 22-10-2011, 20:39   #8 (permalink)
Balkan Boris
 
Benutzerbild von marconi
 
Registriert seit: Mar 2007
Beiträge: 283
PHP-Code:
trace(mainMenu); // -> 0; 
buildMenu(); 
trace(mainMenu); // -> Deine Breite; 
Ja genau das hab ich verstanden.

Vielen Dank für deinen Denkanstoss Martin. Ich habe es jetzt hinbekommen.

Ich war verwirrt auf Grund der mir 4 angezeigten Werte. Habe dann herausgefunden,
dass er nur den letzten als Variable verwendet.

PHP-Code:
var menuWidth mainMenu._width;

_root.menuWidth menuWidth;
_root.mainX mainX;

TweenMax.to(_parent.frame_lefttime, {_x:mainXease:tweenOut});
TweenMax.to(_parent.frame_middletime, {_width:menuWidth 10ease:tweenOut});
TweenMax.to(_parent.frame_righttime, {_x:_parent.frame_left._x menuWidth 15ease:tweenOut}); 
__________________
Unbekannt verzogen (Heute um 03:44 Uhr)
marconi ist offline   Mit Zitat antworten
Alt 22-10-2011, 21:40   #9 (permalink)
Flash-Designer
 
Benutzerbild von Martin Kraft
 
Registriert seit: May 2006
Ort: Wiesbaden
Beiträge: 6.162
Zitat:
Zitat von marconi Beitrag anzeigen
Ich war verwirrt auf Grund der mir 4 angezeigten Werte.
Wenn Du etwas in eine Schleife schreibst, darfst Du nicht wundern, dass es bei jeder Schleifenausführung ausgeführt wird
__________________
Viele Grüße // Martin

Martin Kraft // Interaktionsdesign

Hilfreiche Websites:
// Hilfe zur Adobe Flash Plattform
// ActionScript 2 Referenz
// ActionScript 3 Referenz
// ActionScript 3 Arbeitshandbuch
// weitere Flash Ressourcen

Bitte keine Flashfragen per PM oder Profilnachricht! Dafür ist das Forum da!
Martin Kraft 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


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
DisplayObject3D - width ermitteln Retendo 3D 2 28-07-2008 15:24
Wie kann ich in einem dynamischen Textfeld, die Downloadgeschwindigkeit ermitteln. katimp ActionScript 3 7 29-02-2008 13:44
Wie kann ich die Länge eines dynamischen Textfeldes exakt ermitteln? Bitte lesen! JuL! Flash 8 2 10-02-2006 11:39
Embed width="" in flash ermitteln Robson_Rob Flash MX 2004 3 21-09-2005 14:11
Breite eines dynamischen Textfeldes ermitteln fany ActionScript 1 2 19-08-2004 10:57


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:46 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele