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

    AS2, Ciclo for, sintassi mc[i]

    Intanto salve a tutti e complimenti per forum e sito (punti di riferimento oramai da anni!).
    Credo che la risposta alla mia domanda sia abbastanza semplice, ma avendo imparato l'AS soltanto nell'usarlo saltuariamente, senza mai averlo studiato a modo, non so proprio come cercare (ne ho provate abbastanza di chiavi di ricerca, ma senza risultato).

    Vengo al problema:
    In un secondo ciclo for devo settare la x di un tot (var num) di movieclip duplicati in precedenza da un primo ciclo for.

    questo è il primo ciclo con cui duplico e sistemo temporaneamente anche la posizione dei mc
    Codice PHP:
    for (var i:Number 1;i<=num;i++){
                          var 
    newX:Number * (mc._width);
                      
    duplicate mc.duplicateMovieClip("mc" ii, {_x:newX});
                  } 
    Fino a qui tutto ok

    Per il secondo ciclo io la vedevo con semplicità come una cosa del genere
    Codice PHP:
        for (var i:Number 0;i<=num;i++){
             
    mc[i]._x mc[i]._x 100;
            
    trace(mc[i]._x);
                    } 
    Penso sia la sintassi "mc[i]._x" ma in verità non mi funziona neanche a cambiarlo a martellate...
    E' tutto il giorno che ne provo di tutti i colori, ma niente... così ho deciso di provare ad appellarmi ad altri cervelli.
    grazie e benvenuto a me

  2. #2
    Utente di HTML.it L'avatar di and80
    Registrato dal
    Mar 2003
    Messaggi
    15,182
    se vuoi lavorare in quel modo devi usare la sintassi delle parentesi quadre, passando però una stringa all'ooggetto che contiene gli mc, se ad esempio gli mc vengono duplicati in _root devi usare _root come matrice e un elemento stringa che indichi l'mc che vuoi raggiungere, all'interno delle parentesi quadre


    codice:
    for (var i:Number = 1; i<=num; i++){
        _root["mc" + i]._x = _root["mc" + i]._x - 100;
    }
    in alternativa nel primo ciclo registri i clip dentro ad un array poi ci puoi accedere con l'indice come volevi fare tu

    codice:
    var mc_array:Array = [];
    for (var i:Number = 1; i <= num; i++) {
        var newX:Number = i * mc._width;
        mc_array.push (mc.duplicateMovieClip("mc" + i, i, {_x:newX}));
    }
    // secondo ciclo
    for (var k:Number = 0; k < mc_array.length; k++) {
        mc_array[k]._x = mc_array[k]._x - 100;
    }

  3. #3
    intanto grazie! hai risposto in maniera perfetta a quello che chiedevo! anche se poi, come mi aspettavo (mi serviva la conferma prima di imbattermi in altri problemi), il ciclo for non va bene per quello che devo fare.

    Provo ad esporre tutto il problema e incorporo tutto il codice (che è cmq in fase di costruzione, nonche è la prima volta che scrivo più di 3 righe di codice sullo stesso frame):
    Praticamente sto costruendo un sito, in vari livelli swf, che si ridemsionano e posizionano a seconda della dimensione dello stage/browser/risoluzione. Nel livello inquestione va una galleria di foto caricata tramite un xml. Usavo due cicli for, perchè uno sta prima dell onResize (se parte in dimensioni originali le foto rimangono dove sono) e l'altro all'interno della funzione onResize (per ridistribuirle a piacimento a seconda dalla dimensione dello stage). Naturalmente quando uso il ciclo for all'interno dell' onResize ad ogni cambiamento mi rielabora il ciclo mandando a quel paese tutti i simboli. Questo è il codice fino ad ora:

    Codice PHP:
    Stage.align "";
    Stage.scaleMode "showAll";
    wdth Stage.width;
    hght Stage.height;
    conthght cont._height;
    contwdth cont._width;
    Stage.scaleMode "noScale";
    var 
    num:Number;
    var 
    duplicate:MovieClip;
    filexml "pics.xml";
    ApriXML();
    function 
    ApriXML () {
    mioxml = new XML();
    mioxml.ignoreWhite true;
    myarray = new Array();
    mioxml.load(filexml);
    mioxml.onLoad ElaboraXML;
    function 
    ElaboraXML (success) {
        if (
    mioxml.loaded) {
              
    myarray mioxml.childNodes;
              
    num myarray.length+1;
              for (var 
    i:Number 1;i<=num;i++){
                    var 
    newX:Number * (mc._width);
                    
    duplicate mc.duplicateMovieClip("mc" ii, {_x:newX});
                  }
            };
        };
    };

    controllo = new Object();
    controllo.onResize = function() {
        
    Stage.width
        h 
    Stage.height
        cx 
    = (w-wdth)/2;
        
    cy = (h-hght)/2;
        if (
    w>wdth && h>hght) {
            
    cont._width w-(cx/2);
            
    cont._height cont._width/(contwdth/conthght);
        } else {
            
    cont._height conthght;
            
    cont._width contwdth;
        }
        
    cont._y Math.round(h/2-cy+15);
        
    cont._x Math.round(w/2-cx);
    //      myarray = mioxml.childNodes;
    //      num = myarray.length;
    //     for (var i:Number = 0;i<=num;i++){
    //        _root["mc" + i]._x = _root["mc" + i]._x - cx;
    //        trace(_root["mc" + i]._x);
    //        }

    };

    Stage.addListener(controllo);
    controllo.onResize();
    stop(); 
    Dovrebbe essere abbastanza chiaro senza che lo spiego passo x passo. Il simbolo cont è soltanto lo sfondo dietro le foto.

    Praticamente devo trovare una soluzione per la parte di codice commentata (arancione). A qualcuno viene in mente qualcosa?? Probabilmente mi sto imbattendo in qualcosa che per me è veramente troppo, ma per crescere ogni tanto una bella batosta va presa

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.