Visualizzazione dei risultati da 1 a 9 su 9

Discussione: [AS3] scrolling stage

  1. #1

    [AS3] scrolling stage

    Ciao a tutti.
    Ho scaricato una gallery gratuita in as3. L'unico problema di questa gallery è che non prevede il multipagina, per cui le thumbnails vanno ad allinearsi una dopo l'altra, e se eccedono le dimensioni dello stage, vengono tagliate.
    Pensavo perciò di inserire una scrollbar, o ancora meglio, fare in modo che lo stage scrolli quando il mouse si muove. Il problema è che non conosco un piffero di as3 (e poco di as2), per cui mi chiedevo se qualche buon'anima mi può dare una mano

  2. #2
    Utente di HTML.it L'avatar di and80
    Registrato dal
    Mar 2003
    Messaggi
    15,182
    Ho scritto una classe che estende Sprite, che praticamente è un contenitore per altri oggetti di visualizzazione che se sforano una certa dimensione, vengono scrollati con il movimento del mouse. Non è difficile da applicare, ma bisognerebbe inserirla nel contesto della tua gallery.

  3. #3

  4. #4
    Utente di HTML.it L'avatar di and80
    Registrato dal
    Mar 2003
    Messaggi
    15,182
    Ok, quando posso la scarico e vedo se si può applicare la classe, ma non ti prometto che succederà a breve.
    Nel mentre se vuoi tentare anche tu, questa è la classe:

    Codice PHP:
    package {
        
    import flash.display.DisplayObject;
        
    import flash.display.MovieClip;
        
    import flash.display.Sprite;
        
    import flash.geom.Rectangle;
        
    import flash.events.Event;
        
    import flash.events.MouseEvent;
        public class 
    MouseBox extends Sprite {
            private var 
    __t:DisplayObject;
            private var 
    __w:int;
            private var 
    __h:int;
            private var 
    __b:Boolean;
            private var 
    __v:Number;
            private var 
    __c:Sprite;
            private var 
    __g:Sprite;
            private var 
    __s:Sprite;
            private var 
    __bv:Boolean;
            public function 
    MouseBox (t:DisplayObject=nullw:int=0h:int=0v:int=1) {
                
    __t t;
                
    __w w;
                
    __h h;
                
    __v v;
                
    __bv true;
                
    __c = new Sprite();
                
    __g = new Sprite();
                
    __s = new Sprite();
                if (
    __t != null) {
                    
    __init__();
                }
            }
            private function 
    __init__() {
                
    addChild(__g);
                
    addChild(__c);
                
    __s.addChild(__setRect__('n'1300000, {alpha:0}));
                
    __s.width __t.width;
                
    __c.addChild(__t);
                
    __c.addChild(__s);
                
    __c.scrollRect = new Rectangle(0,0,__w,__h);
                
    __s.addEventListener(MouseEvent.MOUSE_OVER__over__);
                
    __s.addEventListener(MouseEvent.MOUSE_OUT__out__);
                
    __s.addEventListener(MouseEvent.MOUSE_MOVE__move__);
            }
            private function 
    __over__(e:MouseEvent) {
                
    __b true;
            }
            private function 
    __out__(e:MouseEvent) {
                
    __b false;
                
    __c.removeEventListener(Event.ENTER_FRAME__enterFrame__);
                
    __c.removeEventListener(Event.ENTER_FRAME__enterFrameX__);
            }
            private function 
    __move__(e:MouseEvent) {
                if (
    __b) {
                    if(
    __bv){
                        
    __c.addEventListener(Event.ENTER_FRAME__enterFrame__);
                    }
                    
    __c.addEventListener(Event.ENTER_FRAME__enterFrameX__);
                } else {
                    if(
    __bv){
                        
    __c.removeEventListener(Event.ENTER_FRAME__enterFrame__);
                    }
                    
    __c.removeEventListener(Event.ENTER_FRAME__enterFrameX__);
                }
            }
            private function 
    __enterFrame__(e:Event) {
                var 
    temp:Number Math.floor((__c.mouseY-__h/2)/__v);
                switch (
    Math.abs(temp)/temp) {
                    case 
    :
                        if (
    __t.> -__t.height+__h) {
                            
    __t.-= temp;
                        } else {
                            
    __c.removeEventListener(Event.ENTER_FRAME__enterFrame__);
                        }
                        break;
                    case -
    :
                        if (
    __t.) {
                            
    __t.-= temp;
                        } else {
                            
    __c.removeEventListener(Event.ENTER_FRAME__enterFrame__);
                        }
                        break;
                }
            }
            private function 
    __enterFrameX__(e:Event){
                var 
    tempX:Number Math.floor((__c.mouseX-__w/2)/__v);
                switch (
    Math.abs(tempX)/tempX) {
                    case 
    :
                        if (
    __t.> -__t.width+__w) {
                            
    __t.-= tempX;
                        } else {
                            
    __c.removeEventListener(Event.ENTER_FRAME__enterFrameX__);
                        }
                        break;
                    case -
    :
                        if (
    __t.) {
                            
    __t.-= tempX;
                        } else {
                            
    __c.removeEventListener(Event.ENTER_FRAME__enterFrameX__);
                        }
                        break;
                }
            }
            private function 
    __setRect__ (n:String=""w:Number=100.0h:Number=100.0c:uint=0b:Number=NaNl:uint=0o:Object=null):Shape {
                var 
    s:Shape = new Shape();
                
    s.name n;
                var 
    != null && o['alphaFill'] != null o['alphaFill'] : 1.0;
                if (
    != null) for (var p in o) try { s[p] = o[p] } catch (err) {};
                
    with (s) {
                    
    graphics.lineStyle (bl1false"normal""none""miter"255);
                    
    graphics.beginFill (cA);
                    
    graphics.drawRect (00wh);
                    
    graphics.endFill ();
                }
                return 
    s;
            }
            public function 
    applyInterface(d:DisplayObject) {
                
    __g.addChild(d);
                
    __c.= (__g.width-__w)/2;
                
    __c.= (__g.height-__h)/2;
            }
            public function 
    refresh () {
                
    __s.width __t.width;
                
    __s.height __t.height;
            }
            public function 
    get container():Sprite {
                return 
    __c;
            }
            public function 
    get content():* {
                return 
    __t;
            }
            public function 
    get activeArea():Sprite {
                return 
    __s;
            }
            public function 
    set verticalScroll (b:Boolean) {
                
    __bv b;
            }
            public function 
    set scrollWidth (n:Number) {
                
    __w n;
                
    __c.scrollRect = new Rectangle(0,0,__w,__h);
            }
            public function 
    set scrollHeight (n:Number) {
                
    __h n;
                
    __c.scrollRect = new Rectangle(0,0,__w,__h);
            }
        }


  5. #5
    è sufficiente richiamare la classe nello stage principale?

    ti ringrazio in ogni caso per le risposte

  6. #6
    Utente di HTML.it L'avatar di and80
    Registrato dal
    Mar 2003
    Messaggi
    15,182
    La classe va inserita in un file .as con lo stesso nome della classe, poi all'interno del codice del fla che richiama la tua gallery bisogna inserire un passaggio intermedio di creazione della classe e bisogna fare in modo che quello "sprite" che viene creato diventi il primo parametro del costruttore della mia classe (che rappresenta appunto il contenuto da scrollare).

    Per creare una nuova istanza di MouseBox bisogna fare così:

    var mb:MouseBox = new MouseBox(sprite, 380, 215, 10);
    addChild(mb);

    Nel codice si aggiungono queste righe e si leva addChild(sprite) e tutto dovrebbe funzionare. Anche se mi sta venendo qualche dubbio per le azioni interne ai pulsanti..

  7. #7
    Utente di HTML.it L'avatar di and80
    Registrato dal
    Mar 2003
    Messaggi
    15,182
    Mmh, l'ho testato ora e non va bene per questa situazione, c'è una sorta di vuoto che fa aumentare lo scroll in orizzontale e blocca tutti i calcoli.

  8. #8
    Originariamente inviato da and80
    Mmh, l'ho testato ora e non va bene per questa situazione, c'è una sorta di vuoto che fa aumentare lo scroll in orizzontale e blocca tutti i calcoli.
    Oh

    Scusa se non mi sono fatta viva prima ma mi si è bruciato il pc nel mentre

    Quindi, che alternative ho? Secondo te è impossibile applicare lo scroll a quel filmato, oppure è un problema legato alla tua classe?

  9. #9
    Utente di HTML.it L'avatar di and80
    Registrato dal
    Mar 2003
    Messaggi
    15,182
    E' una questione legata alla classe, che era nata per un altro scopo.
    Per il tuo problema, in alternativa potresti applicare uno scroll classico, ne trovi uno in un link di questa discussione: http://forum.html.it/forum/showthrea...ghlight=scroll

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.