Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    [F.5.5] preloader di file .swf

    Ciato a tutti, sto usando flash cs 5.5, actionscript 3.0 con la libreria alternativa3d per realizzare un semplice cubo con rotazioni al passaggio del mouse e altre funzioni di test, premetto che il suddetto cubo funziona perfettamente, però avendo applicato delle texture il file swf creato ha raggiunto un peso di circa 1mega...
    Stò quindi cercando di creare un semplice preloader che però non sembra funzionare molto bene. L'errore che mi da è il classico:
    TypeError: Error #1009: Impossibile accedere a una proprietà o a un metodo di un riferimento oggetto null.
    qualcuno sa dirmi se è un problema di conflitto con la libreria o altro?il codice del preloader è questo qui:
    codice:
    import flash.display.DisplayObject;
    
    var l:Loader = new Loader(); l.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, loop); l.contentLoaderInfo.addEventListener(Event.COMPLETE, done); 
    l.load(new URLRequest("alternativatest.swf"));
    
    function loop(e:ProgressEvent):void {
     //var perc:Number = e.bytesLoaded / e.bytesTotal;
     barra.width = perc*100;  //una barra larga 1px che si allunga in relazione al completamento
     }
    function done(e:Event):void {
    trace("break2"); 
    addChild(l); 
    }
    il preloader funziona perfettamente usando un qualsiasi altro swf, non riesco a capirne il motivo...
    Grazie per ogni eventuale aiuto

    PS se avete bisogno allego l'swf incriminato

  2. #2
    Utente di HTML.it L'avatar di Sleter
    Registrato dal
    Aug 2005
    Messaggi
    465
    il preloader funziona perfettamente usando un qualsiasi altro swf, non riesco a capirne il motivo...
    Ciao

    E' probabile che la proprietà che ha riferimento = null sia lo stage del filmato .swf che vai a importare nel filmato "caricatore".

    Controlla il codice AS di quel filmato e vedi se ci sono riferimenti allo stage.
    Qualcosa tipo:

    stage.frameRate = ....

    oppure

    stage.addEventListener ......

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2011
    Messaggi
    42
    1 mega?

    Ho fatto una galleria con pervision3d che tra l' altro é una libreria neanche attualizzata e il file swf é di 66kb.......

  4. #4
    Originariamente inviato da Sleter
    E' probabile che la proprietà che ha riferimento = null sia lo stage del filmato .swf che vai a importare nel filmato "caricatore".
    grazie per la dritta, effettivamente utilizzo proprietà dello stage come
    codice:
    stage.width
    e assegno allo stage listener
    codice:
    stage.addEventListener(Event.ENTER_FRAME,onEnterFrame); stage.addEventListener(MouseEvent.MOUSE_UP, onMouseUp); stage.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown); stage.addEventListener(MouseEvent.MOUSE_MOVE, onMouseMove);
    cosa dovrei fare per evitare il null pointer?anche perchè non riesco proprio a trovare l'errore:
    ho provato a stampare un semplice trace ma mentre nella funzione di "loop" lo stampa, se io lo metto come prima istruzione della funzione "done" non stampa nulla...e nemmeno stampa se vado a metterlo sull'altro swf come prima riga ne su qualsiasi altra funzione dell'swf del cubo.

    grazie ancora per la disponibilità!

  5. #5
    Originariamente inviato da IAMDIX
    1 mega?

    Ho fatto una galleria con pervision3d che tra l' altro é una libreria neanche attualizzata e il file swf é di 66kb.......
    100kb x ogni bitmap x 6 lati = 600 kb
    su 4 lati ci sono degli effetti di over che cambiano la rispettiva bitmap con altre immagini sempre da circa 100kb = 400kb, ecco spiegato l'1 mega

    ovviamente se avessi fatto un loader che le caricava a runtime l'swf sarebbe stato di pochi kb, ma volendo provare a embedd-are le bmp il risultato è questo.
    In ogni caso il mio problema, non è quello del peso dell'swf bensì del preloader che non riesco a far funzionare

    ps onestamente mi trovo pure meglio con Papervision che con Alternativa, sia per gestione dei materiali che per luci e quant'altro, cionondimeno bisogna sempre sperimentare nuove alternative

  6. #6
    Utente di HTML.it L'avatar di Sleter
    Registrato dal
    Aug 2005
    Messaggi
    465
    Ciao

    La proprietà stage appartiene al filmato "caricatore" mentre l'.swf "caricato" diventa un oggetto secondario, come un MovieClip che di fatto non ha un suo stage.

    Puoi risolvere in diversi modi ma per essere più precisi bisognerebbe vedere tutto il codice.

    Se il tuo .fla lavora su una sua DocumentClass prova a fare l' ADDED_TO_STAGE nella funzione costruttrice.

    Se il tuo codice è su un fotogramma della timeline principale non è necessario che anteponi la proprietà stage prima dei Listener, ... è sottinteso e nel caso il filmato venga importato in un altro filmato potrebbe generare l'errore che riscontri.
    Per quanto riguarda lo stage.width considera che la larghezza e l'altezza dello stage saranno quelle del filmato "caricatore" (unico vero proprietario dello stage) quindi se ti serve centrare il filmato secondario (*.swf caricato) fallo sull'oggetto Loader direttamente nel filmato "caricatore" mentre nel "caricato" posizioni gli oggetti su coordinate x e y fisse.

    In una DocumentClass come ti dicevo prima puoi risolvere con l'added_to_stage:

    Codice PHP:
    public function Main()
            {
                
    addEventListener(Event.ADDED_TO_STAGE,init);
            }
    private function 
    init(evento:Event):void
            
    {
                
    removeEventListener(Event.ADDED_TO_STAGE,init);
                                                          ....................... 
            } 
    Nella funzione "init" puoi chiamare le funzioni che ti servono usando la proprietà stage senza problemi anche se questo filmato diventa un oggetto secondario dello stage che lo carica.

    ciao

  7. #7
    Originariamente inviato da Sleter
    In una DocumentClass come ti dicevo prima puoi risolvere con l'added_to_stage:

    Codice PHP:
    public function Main()
    {
                
    addEventListener(Event.ADDED_TO_STAGE,init);
    }
    private function 
    init(evento:Event):void
    {
                
    removeEventListener(Event.ADDED_TO_STAGE,init);
                                                          ....................... 

    grazie, mi hai risolto una lunga serie di dubbi!

    La soluzione è perfettamente funzionante!

    grazie ancora

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.