Visualizzazione dei risultati da 1 a 2 su 2
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2005
    Messaggi
    119

    Papervision3D e listener

    Ok, sto creando la solita galleria in flash usando per l'appunto Papervision3D usando un bel tutorial trovato qui

    Tuttavia il listener ha come target solo la prima foto, ora, avevo letto su un'altro tutorial (questo) che dando come target al listener l'oggetto che contiene tutte le foto e aggiungendo poi un parametro booleano a true (lo useCapture) si poteva fa in modo che il listener fosse attivo per tutte le foto singolarmente invece che per tutto l'album in blocco.

    La citazione precisa e:
    album.addEventListener(MouseEvent.ROLL_OVER, onOver, true);
    album.addEventListener(MouseEvent.ROLL_OUT, onOut, true);

    //listener in caso di ridimensionamento della pagina web
    stage.addEventListener(Event.RESIZE, onResize);

    //listener per dare l’effetto 3D al movimento del mouse
    stage.addEventListener(MouseEvent.MOUSE_MOVE, muovi_album);

    I 2 listener sono un po’ particolari, innanzitutto un occhio attento si accorge che il listener è inserito nell’oggetto “album” che contiene tutte le foto e che quindi, in caso di roll over, è questo l’oggetto target del listener, e non una sola foto. Come è possibile che però, andando col mouse sopra una foto, si modifica la luminosità di SOLO quella foto e non di tutto l’album?
    Cerchiamo di capirlo.
    Nel listener vediamo, in conclusione, la presenza (alquanto insolita) di un parametro booleano (true in questo caso), esso rappresenta un argomento denominato “useCapture” un po’ difficile da spiegare (riguarda i passaggi di propagazione di un evento, cose da puri programmatori), ma in pratica serve per far attivare il listener precisamente sull’oggetto interno che in questo caso viene colpito dal passaggio del mouse. In poche parole è come se il listener fosse su ogni foto e non su tutto l’album. In questo modo però si scrive meno codice (certo… se uno lo sa!
    Alla luce di tutto questo ho provato a fare altrettanto con il mio script e ovviamente questo non ha avuto alcun effetto:


    Codice PHP:
    package com.flashmoto.gallery
    {
        
    import br.com.stimuli.loading.BulkErrorEvent;
        
    import br.com.stimuli.loading.BulkLoader;
        
    import br.com.stimuli.loading.BulkProgressEvent;

        
    import caurina.transitions.Tweener;

        
    import flash.display.Bitmap;
        
    import flash.display.MovieClip;
        
    import flash.display.Sprite;
        
    import flash.events.Event;
        
    import flash.geom.Rectangle;
        
    import flash.system.Capabilities;
        
    import flash.text.TextField;

        
    import org.papervision3d.Papervision3D;
        
    import org.papervision3d.cameras.Camera3D;
        
    import org.papervision3d.core.log.PaperLogger;
        
    import org.papervision3d.core.log.PaperTraceLogger;
        
    import org.papervision3d.events.InteractiveScene3DEvent;
        
    import org.papervision3d.materials.*;
        
    //import org.papervision3d.materials.BitmapMaterial;
        //import org.papervision3d.materials.MovieMaterial;
        
    import org.papervision3d.objects.DisplayObject3D;
        
    import org.papervision3d.objects.primitives.Plane;
        
    import org.papervision3d.render.BasicRenderEngine;
        
    import org.papervision3d.scenes.Scene3D;
        
    import org.papervision3d.view.Viewport3D;

        public class 
    Gallery extends Sprite
        
    {
            public var 
    loader                   BulkLoader;        // Loader for the gallery xml and gallery images
            
    public var viewport                   Viewport3D;        // Papervision3d components - Viewport
            
    public var scene                   Scene3D;            // Papervision3d components - Scene
            
    public var camera                   Camera3D;            // Papervision3d components - Camera
            
    public var renderer                   BasicRenderEngine;    // Papervision3d components - BasicRenderEngine
            
    public var galleryImagesCollection : Array;                // Collection of images urls
            
    public var galleryPlanesCollection : Array;                // Collection of gallery planes to be added to the scene
            
    public var galleryPlanes           : Array;                // Collection of scene gallery planes
            
            
    private var _galleryXMLLoaded  Boolean false;    // Flag that indicates if xml is loaded
            
    private var _planesHolder      DisplayObject3D;    // Holder for the gallery planes
            
    private var _buttonsHolder     DisplayObject3D;    
            private var 
    _imageZoomed       Boolean false;    // Flag that indicates zoomed image state
            
    private var _currentPlaneIndex uint    0;        // Current plane ( first in the line ) index
            
    private var _firstPlaneZ       Number  0;        // First plane z coordinate, planes shift
            
    private var _planesAreMoving   Boolean false;    // Flag that indicates if planes are moving
            
            
    public static const GALLERY_XML                 String 'xml/gallery.xml';    // Path to the gallery xml file
            
    public static const VIEWPORT_WIDTH           Number 1400;                // Viewport width
            
    public static const VIEWPORT_HEIGHT          Number 800;                // Viewport height
            
    public static const GALLERY_PLANE_WIDTH      Number 400;                // Gallery plane width
            
    public static const GALLERY_PLANE_HEIGHT     Number 400;                // Gallery plane height
            
    public static const GALLERY_PLANE_SEGMENTS_W Number 3;                    // Gallery plane segments ( width )
            
    public static const GALLERY_PLANE_SEGMENTS_H Number 3;                    // Gallery plane segments ( height )
            
    public static const R                        Number 2000;                // Raggio della circonferenza su cui si dispongono le foto

            
    public function Gallery() {
                
    // Gallery Constructor
                // -------------------
                
    loadImagesData();// Load images data
            
    }

            private function 
    loadImagesData():void {
                
    // Loads images data from xml file
                // -------------------------------
                
            
    }
            
            private function 
    onGalleryLoadedevent:Event ):void {
                
    // Parses gallery xml file and starts images loading process
                // ---------------------------------------------------------
                
            
    }
            
            private function 
    onGalleryLoadingProgressevent:BulkProgressEvent ):void {
                
    // Shows loader progress info
                // --------------------------
                 
            
    }
            
            private function 
    onGalleryLoadingErrorevent:BulkErrorEvent ):void {
                
    // Shows loader error info
                // -----------------------
                
            
            
    private function init3DEngine():void {
                
    // Inits 3D engine. Creates viewport, scene, camera and renderer and
                // also creates and adds scene objects. Creates event listener for the
                // enter frame event for the scene rendering.
                // -------------------------------------------------------------------
                
                
    addEventListenerEvent.ENTER_FRAMErender ); // Render the scene every enter frame
            
    }
            
            private function 
    createGalleryImages():void {
                
    // Creates display objects from loaded images and updates gallery objects collection
                // ---------------------------------------------------------------------------------
                
            
    }
            
            private function 
    createGalleryDisplayObjectimage:String ):DisplayObject3D {
                
    // Creates gallery 3D object using loaded image bitmap.
                // ------------------------------------------------------------------
                // The method returns DisplayObject3D object, and gallery do not need
                // to know if there is a plane, cube or sphere, so later I can
                // rewrite this method to create any objects needed.
                // ------------------------------------------------------------------
                
            
    }

            private function 
    addGalleryImages():void {
                
    // Adds gallery display objects to the scene and arranges them. Later I
                // will add more arrangent strategies to this application, and all I
                // need to do is to update this method which will get the stategy name
                // as parameter.
                // --------------------------------------------------------------------
                
    _planesHolder = new DisplayObject3D(); // Create holder for the gallery objects
                
    scene.addChild_planesHolder );

                
    galleryPlanes = new Array();

                
    // Add gallery planes INIZIO
                
    var flag       Number 1;
                var 
    GammaRAD   Number 0;
                var 
    GammaDEG   Number 0;
                var 
    BetaRAD    Number Math.PI/2;
                var 
    AlfaRAD    Number 0;
                var 
    sinAlfaRAD Number 0;
                
                var 
    int 0;
                var 
    int 0;
                
                for( var 
    uint 0galleryPlanesCollection.lengthi++ ) {
                    var 
    galleryPlane Plane galleryPlanesCollection[i] as Plane;
                    
                    
    GammaRAD GammaRAD + ((2*Math.PI)/(galleryPlanesCollection.length)); //angolazione foto rispetto al centro
                    
    GammaDEG = (180*GammaRAD)/Math.PI;
                    
                    
    galleryPlane.R*Math.cos(GammaRAD);
                    
    galleryPlane.R*Math.sin(GammaRAD);
                    
    galleryPlane.yaw(-GammaDEG);
                                
                    
    galleryPlanes.push_planesHolder.addChildgalleryPlane ) );
                }
            
                
    // Add gallery planes FINE

                // Listen for the events only from the first gallery object
                //galleryPlane = galleryPlanes[_currentPlaneIndex] as Plane;
                
    galleryPlane.addEventListenerInteractiveScene3DEvent.OBJECT_PRESSonPlanePress );
                
    _planesHolder.addEventListenerInteractiveScene3DEvent.OBJECT_OVERonPlaneOvertrue );
                
    //galleryPlane.addEventListener( InteractiveScene3DEvent.OBJECT_OVER, onPlaneOver );
                
    galleryPlane.addEventListenerInteractiveScene3DEvent.OBJECT_OUTonPlaneOut );
            }
            
            private function 
    addButtons():void{
                
    // Aggiunge i pulsanti per scorrere la galleria avanti e indietro
                // --------------------------------------------------------------
                
    _buttonsHolder = new DisplayObject3D(); // Create holder for the gallery objects
                
    scene.addChild_buttonsHolder );
                
                var 
    materiale_rettangolo_sx BitmapFileMaterial = new BitmapFileMaterial("prev.jpg");
                var 
    materiale_rettangolo_dx BitmapFileMaterial = new BitmapFileMaterial("next.jpg");
                
                
    materiale_rettangolo_sx.interactive true;
                
    materiale_rettangolo_dx.interactive true;
                
                var 
    rettangolo_sx Plane  = new Plane(materiale_rettangolo_sx200200);
                var 
    rettangolo_dx Plane  = new Plane(materiale_rettangolo_dx200200);
                
                
    //posizionamento PREV
                
    rettangolo_sx.= -2000;
                
    rettangolo_sx.450;
                
    rettangolo_sx.= -1500;
                
                
    //posizionamento NEXT
                
    rettangolo_dx.= -1000;
                
    rettangolo_dx.450;
                
    rettangolo_dx.= -1500;
                
                
    _buttonsHolder.addChild(rettangolo_sx);
                
    _buttonsHolder.addChild(rettangolo_dx);
                
                
    rettangolo_sx.addEventListenerInteractiveScene3DEvent.OBJECT_PRESSonButtonPress_Prev );
                
    rettangolo_dx.addEventListenerInteractiveScene3DEvent.OBJECT_PRESSonButtonPress_Next );
            }
            
            private function 
    onButtonPress_Prev(event:InteractiveScene3DEvent):void {
                
    trace("precedente");
            }
            
            private function 
    onButtonPress_Next(event:InteractiveScene3DEvent):void {
                
    trace("successivo");
            }

            private function 
    onPlanePressevent:InteractiveScene3DEvent ):void {
                
    // Gallery plane mouse press event handler
                // ---------------------------------------
                
                
                    
                
    }
            }
            
            private function 
    onPlaneOverevent:InteractiveScene3DEvent ):void {
                
    // Gallery plane mouse over event handler
                // --------------------------------------
                
                
                
    trace("passato sopra");
            }
            
            private function 
    onPlaneOutevent:InteractiveScene3DEvent ):void {
                
    // Gallery plane mouse out event handler
                // -------------------------------------
                
                
                
            
    }
            
            private function 
    renderevent:Event ):void {
                
    // Renders the scene
                // -----------------
                
            
    }
        }

    Per facilità di lettura ho lasciato la dichiarazione dei pacchetti e delle variabili/costanti e anche le funzioni che richiamano i listener, se serve anche il resto dite pure

  2. #2
    Utente di HTML.it
    Registrato dal
    May 2005
    Messaggi
    119
    Ok, come al solito la fretta di finire non ti fa vedere la soluzione più ovvia... ho risolto mettendo la chiamata del listener dentro al ciclo for :


    Codice PHP:
    ...
    private function 
    addGalleryImages():void {
                
    // Adds gallery display objects to the scene and arranges them. Later I
                // will add more arrangent strategies to this application, and all I
                // need to do is to update this method which will get the stategy name
                // as parameter.
                // --------------------------------------------------------------------
                
    _planesHolder = new DisplayObject3D(); // Create holder for the gallery objects
                
    scene.addChild_planesHolder );

                
    galleryPlanes = new Array();

                
    // Add gallery planes INIZIO
                
    var flag       Number 1;
                var 
    GammaRAD   Number 0;
                var 
    GammaDEG   Number 0;
                var 
    BetaRAD    Number Math.PI/2;
                var 
    AlfaRAD    Number 0;
                var 
    sinAlfaRAD Number 0;
                
                var 
    int 0;
                var 
    int 0;
                
                for( var 
    uint 0galleryPlanesCollection.lengthi++ ) {
                    var 
    galleryPlane Plane galleryPlanesCollection[i] as Plane;
                    
                    
    GammaRAD GammaRAD + ((2*Math.PI)/(galleryPlanesCollection.length)); //angolazione foto rispetto al centro
                    
    GammaDEG = (180*GammaRAD)/Math.PI;
                    
                    
    galleryPlane.R*Math.cos(GammaRAD);
                    
    galleryPlane.R*Math.sin(GammaRAD);
                    
    galleryPlane.yaw(-GammaDEG);
                                
                    
    galleryPlanes.push_planesHolder.addChildgalleryPlane ) );
                    
                    
    galleryPlane galleryPlanes[i] as Plane;
                    
    galleryPlane.addEventListenerInteractiveScene3DEvent.OBJECT_OVERonPlaneOver );
                }
            
                
    // Add gallery planes FINE

                // Listen for the events only from the first gallery object
                //galleryPlane = galleryPlanes[_currentPlaneIndex] as Plane;
                /*galleryPlane.addEventListener( InteractiveScene3DEvent.OBJECT_PRESS, onPlanePress, true );
                _planesHolder.addEventListener( InteractiveScene3DEvent.OBJECT_OVER, onPlaneOver, true );
                //galleryPlane.addEventListener( InteractiveScene3DEvent.OBJECT_OVER, onPlaneOver );
                galleryPlane.addEventListener( InteractiveScene3DEvent.OBJECT_OUT, onPlaneOut, true );*/
            
    }
    ... 

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 © 2024 vBulletin Solutions, Inc. All rights reserved.