Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    [AS3] Disporre orizzontalmente testo di grandezza variabile

    Salve,
    mi sto cimentando nell'uso di AS3 e mi sono imbattuto in un problemino stupido, ma che per ora non trova soluzione.
    ho creato dinamicamente un un menu che si dovrebbe disporre in orizzontale, con ogni voce distanziata dalla precedente di un tot di pixel.
    In AS2 facevo una cosa del genere:

    Codice PHP:
    var menuHolder:MovieClip this.createEmptyMovieClip("menuHolder"0); 

    for (
    i=0i<menu.lengthi++) { 
    //menu è un array che contiene tutte le voci di menu 

    var m:MovieClip menuHolder.createEmptyMovieClip("m"+ii); 
    if (
    i>0) { 
        
    menuHolder["m"+i]._x menuHolder["m"+(i-1)]._x+menuHolder["m"+(i-1)]._width+10


    e così non c'erano problemi...

    ora...come faccio la stessa cosa con AS3?
    ho provato ad assegnare un nome ad ogni istanza ed a refenziarla con un parent, ma non funzia...

    Qualcuno sa darmi una dritta?

    Grazie
    Ricorda che mentre tu sei quì a ridere e scherzare, nel mondo c'è qualcun'altro che ride e scherza più di te!

  2. #2
    Codice PHP:
    package com.w.display{
        
    import flash.display.Sprite;
        
    import flash.text.TextField;
        
    import flash.text.TextFieldAutoSize;
        
    import flash.text.TextFormat;
        public class 
    Tab extends Sprite {
            public static var 
    _pos=0;
            private var 
    _item:Object;
            private var 
    _href:String;
            private var 
    _label:TextField;
            public function 
    Tab(item:Object) {
                
    _item=item;
                if (
    _item.height===undefined) {
                    
    _item.width=100;
                    
    _item.height=20;
                    
    _item.alpha=1;
                    
    _item.ellipseWidth=5;
                    
    _item.color=0xFFFFFF;
                }
                
    _setLabel();
                
    _setTab();
                
            }
            private function 
    _setLabel():void {
                
    _label = new TextField();
                
    _label.autoSize=TextFieldAutoSize.LEFT;
                
    _label.background=false;
                
    _label.border=false;
                
    _label.name="label_txt";
                
    _label.x=5;
                
    _label.y=0;
                
    _label.selectable=false;

                var 
    format:TextFormat = new TextFormat();
                
    format.font="Verdana";
                
    format.color=0xFF0000;
                
    format.size=10;
                
    format.underline=true;

                
    _label.defaultTextFormat=format;

                
    _label.text=_item.label;



            }
            private function 
    _setTab():void {
                
    _href=_item.href;
                
    name=_item.name;
                
    graphics.beginFill_item.color_item.alpha );
                
    graphics.drawRoundRect00_item.width,_item.height_item.ellipseWidth);
                
    graphics.endFill();
                
    buttonMode=true;
                
    mouseChildren=false;
                
                
    addChild_label);
                
            }
            public function 
    get href():String {
                return 
    _href;
            }
        }


    Possibile modo

    Without faith, nothing is possible. With it, nothing is impossible
    http://ilwebdifabio.it

  3. #3
    Io farei così:

    Codice PHP:
    var menu:Array = ["home""chi siamo""prodotti""contatti"];

    var 
    menuHolder:MovieClip = new MovieClip();
    addChild(menuHolder);

    for (var 
    i:int 0i<menu.lengthi++)
    {
        var 
    tf:TextField addTf(menu[i]);
        var 
    mc:MovieClip addMc(tf.widthtf.height);
        
    mc.addChild(tf);
        
    menuHolder.addChild(mc);
        
        try {
            
    menuHolder.getChildAt(i).menuHolder.getChildAt(i-1).menuHolder.getChildAt(i-1).width 10;
        } catch (
    e:Error) {};
        
    }

    function 
    addTf(testo:String):TextField
    {
        var 
    tf:TextField = new TextField();
        
    tf.autoSize TextFieldAutoSize.LEFT;
        
    tf.text testo;
        
        return 
    tf;
    }

    function 
    addMc(w:Numberh:Number):MovieClip
    {
        var 
    mc:MovieClip = new MovieClip();
        
    mc.graphics.beginFill(0xCCCCCC1);
        
    mc.graphics.drawRect(00wh);
        
        return 
    mc;

    Ovviamente se i bottoni del menu li hai già devi solo usare il ciclo con i tuoi bottoni, senza crearli a runtime.

  4. #4
    fantastico!!!
    ora provo con entrambi i metodi e poi vi fo sapere...

    per ora il GRAZIE è d'obbligo!
    Ricorda che mentre tu sei quì a ridere e scherzare, nel mondo c'è qualcun'altro che ride e scherza più di te!

  5. #5
    Utente bannato
    Registrato dal
    Feb 2009
    Messaggi
    39
    mi intrometto

    ciao kaneda, nel tuo esempio (utilissimo) perchè mi da errore se aggiungio un trace al catch dopo il posizionamento con getChild?


    Codice PHP:
            } catch (e:Error) {//
    //            trace("Si è verificato un errore: " + e.message);
    //            return
            

    Codice PHP:
    Si è verificato un erroreError #2006: L'indice fornito è fuori intervallo. 

  6. #6
    Perchè il primo indice è fuori intervallo, dato che stai cercando di ricavare l'oggetto alla depth -1. menuHolder.getChildAt(i-1) al primo giro di for vale 0 - 1.
    Al posto che try / catch puoi mettere un'if per controllare che sia > 0, come ti pare.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.