• User

    problema fisheye menu as2

    Ciao a tutti, seguo spesso questo forum perchè lo trovo molto interessante, ma è la prima volta che scrivo.
    Avrei bisogno della vostra competenza per risolvere un problema al quale non riesco proprio a venire a capo.

    Ho scaricato un bel fisheye menu in as 2, ho cambiato le immagini secondo le mie esigenze, ho convertito le stesse in pulsanti ma, purtroppo, non sono riuscita a renderle linkabili, perchè ogni volta che provo ad integrare la stringa di codice per il link, mi saltano fuori una marea di errori (ed è logico, dato che, purtroppo, sono proprio a livello base con gli as).

    Di seguito vi riporto il codice as2:

    /*
    *    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 = [ "image1", "image2", "image3", "image4",  "image5", "image6", "image7" ];    // images
        var APP_WIDTH:Number = 692;    // Width of this movieclip
        var APP_HEIGHT:Number = 350;    // Height of this movieclip
        var MARGIN:Number = 0;            // Margin between images
        var IMAGE_WIDTH:Number =90;    // Image width
        var IMAGE_HEIGHT:Number = 233;    // Image height
        var MAX_SCALE:Number = 1.5;        // 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! :smile5:


  • Super User

    Ciao Ve benvenuta sul forum GT, se il menù è free puoi postare il link, così vedo se riesco a darti una mano.


  • User

    Ciao Nhatan,

    ti ringrazio molto per la tua risposta tempestiva.

    ti mando il link in pm, perchè qua sul forum non me lo fa inserire, mi dice che non sono utente premium...

    come vedi, le "voci di menu" di default non sono cliccabili, dato che sono immagini. Come detto prima, nell'esempio a cui sto lavorando, ho convertito le immagini in pulsanti per poterli poi linkare. Probabilmente è una cavolata per chi ne sa di actionscript, ma non ci salto mica fuori...

    Grazie mille 🙂


  • Super User

    Guarda puoi fare cosi: fai doppio click sul movieclip image1 in libreria cosi entri in modalita modifica del clip, ora trasforma in clip filmato la bitmap che hai sullo stage, dagli nome istanza ad esmpio "fl_btn" apri un nuovo livello e scrivi il

    
    fl_btn.onRelease = function()
    {
    trace("ok")
        }
    
    

  • User

    Ok, perfetto, fin qua ci sono e ho eseguito meticolosamente le tue istruzioni 🙂 l'ultima cosa che volevo chiedere è: adesso come faccio ad integrare il codice:

    on (release) {
        getURL("");
    }
    

    (ovviamente il link non lo inserisco sempre per il motivo che non sono ancora utente premium)

    Posso inserirlo subito sotto a

    
    fl_btn.onRelease = function()
    {
    trace("ok")
        }
    
    

    ?

    Ti ringrazio ancora per la pazienza 🙂


  • Super User

    Dunque, sei entrata nella time line del clip immagine1 e hai trasformato la bitmap in clip filmato, gli hai dato nome istanza "fl_btn" scrivendolo nell'apposito campo in finestra prorietà e hai creato un nuovo livello. Ora nel primo frame di questo nuovo livello devi scrivere il codice che non sarà nella forma on(release) che si mette sul bottone ma nella forma che si mette sui frame cioè

    
    fl_btn.onRelease = function()
    {
    getURL("nome_pagina.html")
    }  
    
    

  • User

    Perfetto! funziona alla perferzione! Grazie mille, sei stato gentilissimo! 🙂