Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 17

Discussione: Riflessi AS3

  1. #1

    Riflessi AS3

    Ciao a tutti,

    sto creando un applicazione che utilizza la riflessione spiegata nel tutorial "Creare riflessi in stile Web 2.0 con Flash e Actionscript" che purtroppo è in as3(dico purtroppo perchè di as3 non ne so niente).

    ora mi ritrovo difronte ad un problema.

    creo 6 thumb con i rispettivi riflessi

    var rifl1:rifletti=new rifletti(mc1,-60,0x000000,100);
    var rifl2:rifletti=new rifletti(mc2,-60,0x000000,100);
    var rifl3:rifletti=new rifletti(mc3,-60,0x000000,100);
    var rifl4:rifletti=new rifletti(mc4,-60,0x000000,100);
    var rifl5:rifletti=new rifletti(mc5,-60,0x000000,100);
    var rifl6:rifletti=new rifletti(mc6,-60,0x000000,100);

    e fin qui tutto ok
    poi ad un click del mouse devono sparire i riflessi, ma non c'è modo che io riesca a farglielo fare.


    l'ultima cosa che ho provato è questa:
    al click del mouse chiamo questa funzione che è sullo stesso livello della dichiarazione delle variabili qui sopra:


    function giraTutto() {

    for (var i=1; i<=6; i++) {

    var cosa=getChildByName("mc" + i);
    var rifl=getChildByName("rifl"+i);
    removeChild(rifl);
    cosa.play();

    }

    }

    ma non funziona...maledetto as3
    ma dico perchè cambiare così radicalmente as2 !

  2. #2
    Utente di HTML.it L'avatar di and80
    Registrato dal
    Mar 2003
    Messaggi
    15,182
    Dovrebbe esserci nel tuo codice una parte in cui dai i nomi ai tuoi riflessi, se non c'è allora il getChildByName("rifl"+i); non può funzionare. Ci sono diverse alternative, ma ti consiglio di fare in questo modo:

    Codice PHP:
    var a_mc:Array = [mc1mc2mc3mc4mc5mc6];
    var 
    a_rifl:Array = [];
    for (var 
    i:uint=0i<a_mc.lengthi++) {
        
    a_rifl.push (new rifletti(a_mc[i], -600100));


    quando poi devi cancellare, usi questo codice nella tua function "giraTutto"

    Codice PHP:
    function giraTutto () {
        for (var 
    j:uint=0j<a_rifl.lengthj++) {
            
    removeChild(a_rifl[j]);
        }
        
    cosa.play();


  3. #3
    grazie and,
    ora provo come dici tu...
    però facendo il debug, io ho notato che ci sono dei clip che si chiamano rifl1 rifl2 etc etc...
    mma

  4. #4
    Utente di HTML.it L'avatar di and80
    Registrato dal
    Mar 2003
    Messaggi
    15,182
    Sì, ma se la proprietà "name" non viene scritta esplicitamente, rimane vuota rendendo inefficace la ricerca del clip usando getChildByName.

  5. #5
    e visto che ci siamo, qual'è il comando per assegnare nomeistanza in as3 ?

  6. #6
    Utente di HTML.it L'avatar di and80
    Registrato dal
    Mar 2003
    Messaggi
    15,182
    Originariamente inviato da astolfo
    e visto che ci siamo, qual'è il comando per assegnare nomeistanza in as3 ?
    è appunto name, come già scritto, se segui la strada del post iniziale, dovresti fare così:

    Codice PHP:
    var rifl1:rifletti=new rifletti(mc1,-60,0x000000,100);
    var 
    rifl2:rifletti=new rifletti(mc2,-60,0x000000,100);
    var 
    rifl3:rifletti=new rifletti(mc3,-60,0x000000,100);
    var 
    rifl4:rifletti=new rifletti(mc4,-60,0x000000,100);
    var 
    rifl5:rifletti=new rifletti(mc5,-60,0x000000,100);
    var 
    rifl6:rifletti=new rifletti(mc6,-60,0x000000,100);
    rifl1.name "rifl1";
    rifl2.name "rifl2";
    rifl3.name "rifl3";
    rifl4.name "rifl4";
    rifl5.name "rifl5";
    rifl6.name "rifl6"

  7. #7
    doesn't work...


    Codice PHP:
    import rifletti;


    // creo i riflessi (movieclip da riflettere, distanza, colore sfumatura, dimensione sfumatura)
    var rifl1:rifletti=new rifletti(mc1,-60,0x000000,100);
    var 
    rifl2:rifletti=new rifletti(mc2,-60,0x000000,100);
    var 
    rifl3:rifletti=new rifletti(mc3,-60,0x000000,100);
    var 
    rifl4:rifletti=new rifletti(mc4,-60,0x000000,100);
    var 
    rifl5:rifletti=new rifletti(mc5,-60,0x000000,100);
    var 
    rifl6:rifletti=new rifletti(mc6,-60,0x000000,100);
    rifl1.name "rifl1"
    rifl2.name "rifl2"
    rifl3.name "rifl3"
    rifl4.name "rifl4"
    rifl5.name "rifl5"
    rifl6.name "rifl6";



    function 
    giraTutto() {
        
        
        
        for (var 
    i=1i<=1i++) {
            
            var 
    cosa=getChildByName("mc" i);
            var 
    rifl=getChildByName("rifl"+i);
            
    trace(cosa);
            
    trace(rifl);
            
    cosa.play();

        }



    il trace da questo:
    [object thumb_1]
    null

    quindi come vedi il primo lo prende
    e il secondo rimane vuoto...!

  8. #8
    Utente di HTML.it L'avatar di and80
    Registrato dal
    Mar 2003
    Messaggi
    15,182
    Ho bisogno di sapere dove effettui l'azione addChild per i riflessi che crei per capire se il problema riguarda il "percorso" su cui viene aggiunta la visualizzazione del riflesso.

  9. #9
    questo è il file rifletti.as tale e quale a quello del tutorial

    Codice PHP:
    package {

        
    import flash.display.MovieClip;
        
    import flash.display.DisplayObject;
        
    import flash.display.BitmapData;
        
    import flash.display.Bitmap;
        
    import flash.geom.Matrix;
        
    import flash.display.GradientType;
        
    import flash.display.SpreadMethod;

        public class 
    rifletti extends MovieClip {

            private var 
    sorgente:MovieClip;
            private var 
    duplicato:BitmapData;
            private var 
    riflesso:Bitmap;
            private var 
    maschera:MovieClip;
            public function 
    rifletti(mc,distanza,colore,influ) {
                
    //trace(mc)
                // Memorizzo il riferimento alla clip originale
                
    sorgente=mc;
                
    // Ricavo altezza e larghezza della clip
                
    var altezza:Number=sorgente.height;
                var 
    larghezza:Number=sorgente.width;
                
    trace(altezza,larghezza);
                
    // Preparo un oggetto bitmapData con la copia dell'immagine
                
    duplicato=new BitmapData(larghezza,altezza,true,0xFFFFFF);
                
    duplicato.draw(sorgente);


                
    // creo la copia dell'immagine originale
                
    riflesso=new Bitmap(duplicato);
                
    // La inverto (corrisponde alla rotazione di 180 gradi)
                
    riflesso.scaleY=-1;
                
    // e la posiziono al di sotto del movieclip originale
                
    riflesso.y=sorgente.height*2+distanza;
                
    riflesso.name="riflesso";
                
    // Quindi la aggiungo all'interno della clip originale
                
    sorgente.addChild(riflesso);

                
    // creo la clip da utilizzare con riempimento gradiente
                
    maschera = new MovieClip();

                
    // Imposto uno riempimento gradiente lineare di colore bianco, con alpha da 0 ad 1 e che influenzi 
                // circa metà clip
                
    var riempimento:String=GradientType.LINEAR;
                var 
    colori:Array=[colore,colore];
                var 
    trasparenza:Array=[0,1];
                var 
    influenza:Array=[0,influ];

                
    // imposto lo stile del gradiente
                
    var spreadMethod:String=SpreadMethod.PAD;
                
    // creo la matrice per il riempimento
                
    var matr:Matrix = new Matrix();


                
    // Creo il riempimento gradiente 
                
    matr.createGradientBox(larghezzaaltezza,(90/180)*Math.PI00);
                
    maschera.graphics.beginGradientFill(riempimentocolori,trasparenzainfluenzamatrspreadMethod);
                
    // Disegno la clip, con dimensioni pari a quelle del clip sorgente
                
    maschera.graphics.drawRect(0,0,larghezza,altezza);

                
    // posiziono la clip gradiente sopra alla clip riflessa
                
    maschera.y=sorgente.getChildByName("riflesso").y-sorgente.getChildByName("riflesso").height;
                
    sorgente.addChild(maschera);
            }



        }






  10. #10
    Utente di HTML.it L'avatar di and80
    Registrato dal
    Mar 2003
    Messaggi
    15,182
    ok, adesso è chiaro... il riflesso non viene aggiunto nello stage, ma direttamente sull'oggetto che deve riflettere, ossia su mc1, mc2 ecc...
    perciò se ad esempio devi cancellare rifl1, devi farlo da mc1

    mc1.removeChild(rifl1);

    dovrebbe andare

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.