• User

    Problema con fisheye menu

    Ciao a tutti, ho un problema (probabilmente stupidissimo), ma che per me sembra quasi insormontabile, data la mia (purtroppo) scarsa dimestichezza con flash.

    Sto sistemando un menu fisheye preso da un sito (se vi serve il link ve lo mando in pm, perchè non posso ancora linkare), tutto ok fino a quando non supero il numero di simboli che ci sono nel file da modificare.
    Premetto, che i simboli da visualizzare, vengono richiamati tramite action script.
    I simboli in questione sono 7, io però devo aggiungerne due in più e questo mi crea qualche problema, perchè appena aggiungo un'ottavo simbolo (creato da zero), questo non mi viene visualizzato nell'animazione finale. La cosa curiosa è che, se invece io nel codice richiamo due volte uno degli altri, si aggiunge tranquillamente un simbolo in più. Volevo quindi sapere, se c'è un'anima pia che riesce a spiegarmi dove sbaglio.

    Allego il codice as2 e, se vi serve, vi mando il file zippato in pm

        
        /*
        *    A Fish Eye Menu in Actionscript 2
        *   converted by James Ford
        *
        *    based on A Fish Eye Menu in Actionscript 3
        *    from shinedraw.com
        */    
        
            var IMAGES:Array = [ "image2", "image4", "image6", "image1", "image3", "image5", "image7", "image8" ];    // images
            var APP_WIDTH : Number = 670;    // Width of this movieclip
            var APP_HEIGHT : Number = 212;    // Height of this movieclip
            var MARGIN:Number = 0;            // Margin between images
            var IMAGE_WIDTH: Number = 95;    // Image width
            var IMAGE_HEIGHT : Number = 181;    // Image height
            var MAX_SCALE:Number = 1.4;        // Max scale 
            var MULTIPLIER:Number = 60;        // Control the effectiveness of the mouse
            
            var _images : Array = new Array();        // Store the added images
    
            /////////////////////////////////////////////////////        
            // Handlers 
            /////////////////////////////////////////////////////    
            
            function on_added_to_stage():Void{
                // add the images to the stage
                addImages();
                
                // start the mouse event handler
                //stage.addEventListener(MouseEvent.MOUSE_MOVE, on_mouse_move);
            }
            
            // because we've got no document class, we need
            // to start things in a more simple way
            on_added_to_stage()
    
            // mouse event handler
            //function on_mouse_move():Void{
            this.onMouseMove = function():Void {
                //trace("on_mouse_move")
                for(var i:Number = 0 ; i < _images.length; i++){
                    var image : MovieClip = _images* //as MovieClip;    
                    
                    // compute the scale of each image according to the mouse position
                    var imageScale:Number = MAX_SCALE - Math.min(MAX_SCALE - 1, Math.abs(this._xmouse - (image._x + image._width / 2)) / MULTIPLIER);
                    // resize the image
                    resizeImage(image, IMAGE_WIDTH * imageScale, IMAGE_HEIGHT * imageScale, i, IMAGES.length);
                }
                
                // sort the children according to the _yscale
                sortChildren(this, "_yscale");
            }
            
            /////////////////////////////////////////////////////        
            // Public Methods 
            /////////////////////////////////////////////////////    
            
            /////////////////////////////////////////////////////        
            // Private Methods 
            /////////////////////////////////////////////////////    
            
            // add the images to the stage
            function addImages():Void{
                for(var i:Number = 0; i < IMAGES.length; i++){
                    // we can't attach bitmaps in AS2 like we do in AS3, so the bitmaps have been
                    // converted to movieclips and attached that way
                    var imageClass : String = IMAGES*;
                    var image : MovieClip = this.attachMovie(imageClass, imageClass, this.getNextHighestDepth())
                        image.cacheAsBitmap = true;
                    // resize the image
                    resizeImage(image, IMAGE_WIDTH, IMAGE_HEIGHT, i, IMAGES.length);
                    
                    _images.push(image);
                }    
            }
            
            // resize the image
            function resizeImage(image : MovieClip, imageWidth:Number, imageHeight:Number, index:Number, total : Number):Void{
                image._width = imageWidth;
                image._height = imageHeight;        
                image._y = APP_HEIGHT/2  - image._height/2;
                image._x = APP_WIDTH/ 2 + (index - (total - 1) / 2) * (MARGIN + IMAGE_WIDTH)  - image._width / 2;
            }
            
            // Sort the objects according to the image width        
            function sortChildren(container, criteria:String) : Void {
                
                var _numChildren:Number = IMAGES.length//container._numChildren;
                //no need to sort (zero or one child)
                if( _numChildren < 2 ) return ;
                
                //create an Array to sort children
                var children:Array = new Array( _numChildren );
                var i:Number = -1;
                while( ++i < _numChildren )
                {
                    children[ i ] = {mc:container.getInstanceAtDepth( i ), num:container.getInstanceAtDepth( i )._yscale};
                }
                
                //sort by children by the criteria
                children.sortOn( "num", Array.NUMERIC );
                
                var child : MovieClip;
                i = -1;
                while( ++i < children.length )
                {
                    child = MovieClip( children[ i ].mc );
                    //only set new depth if necessary
                    if( i != container.getInstanceAtDepth(i) )
                    {
                        //set their new position
                        child.swapDepths(container.getInstanceAtDepth(i))
                    }
                    
                }
            }        
    ```Grazie mille in anticipo

  • Super User

    Hai fatto il Concatenamento del nuovo simbolo?


  • User

    Ciao Nhatan, e grazie per avermi risposto. Il menu è in as2 (ho preso questo, perchè di as3 ne capisco ancora meno 😞 ). Ecco, forse è proprio quello che mi sfugge: come faccio a fare il concatenamento? Io ho cercato di ricreare il simbolo seguendo lo stesso sistema di quelli già presenti: ho creato il nuovo simbolo image8, in cui ho inserito l'altro nuovo simbolo fl_btn8, se vuoi posso mandarti in pm il file zippato, così riesci a capire meglio quanto detto (perchè, mi rendo conto che detto così non si capisce poi granché).

    Grazie ancora


  • Super User

    Per fare il concatenamento tasto destro sul simbolo in libreria voce concatenamento spunta il cek esporta per actionscript.


  • User

    Grazie mille Nhatan, sono riuscita ad aggiungere il simbolo in più! Sei stato molto gentile 🙂


  • Super User

    Di niente ciao.