Domanda

Sto cercando di creare un preloader per mostrare l'avanzamento del caricamento del file SWF principale, che ha tutto l'esso di risorse incorporate. Ho trovato il metodo della classe fabbrica come descritto a bit-101 , ma non avanzamento del caricamento mai sembra mostrare. I carichi swf bene, ma il bytesLoaded è sempre uguale a bytesTotal e quindi il preloader non viene mai chiamato.

Questa è la classe factory che sto utilizzando

package src
{
 import flash.display.DisplayObject;
 import flash.display.MovieClip;
 import flash.display.StageScaleMode;
 import flash.display.StageAlign;
 import flash.events.Event;
 import flash.utils.getDefinitionByName;

 /**
  * ...
  * @author DefaultUser (Tools -> Custom Arguments...)
  */
 public class Factory extends MovieClip
 {
  private var preloader:Preloader;

  public function Factory()
  {
   stop();
   stage.scaleMode = StageScaleMode.NO_SCALE;
   stage.align = StageAlign.TOP_LEFT;
   addEventListener(Event.ENTER_FRAME, enterFrame);
  }

  public function enterFrame(e:Event):void
  {
   trace(root.loaderInfo.bytesLoaded, root.loaderInfo.bytesTotal);

   if (framesLoaded == totalFrames) {
    removeEventListener(Event.ENTER_FRAME, enterFrame);
    nextFrame();
    init();
   }
   else {
    var percent:Number = root.loaderInfo.bytesLoaded / root.loaderInfo.bytesTotal;
    trace(percent);
   }
  }

  private function init():void
  {
   var mainClass:Class = Class(getDefinitionByName("Main"));
   if (mainClass) {
    var mainApp:Object = new mainClass();
    addChild(mainApp as DisplayObject);
    mainApp.init();
   }
  }

 }

}

La traccia ha invitato l'evento enterFrame mostra che bytesLoaded e bytesTotal sono uguali.

E questo si chiama la classe principale, in cui i carichi swf.

package 
{
 import flash.display.Sprite;

 [Frame(factoryClass="src.Factory")]

 public class Main extends Sprite
 {
  [Embed(source="images/FinalImg01.jpg")]
  private var Image1:Class;
  [Embed(source="images/FinalImg02.jpg")]
  private var Image2:Class;
  [Embed(source="images/FinalImg03.jpg")]
  private var Image3:Class;

  public function init():void
  {
   trace("loaded");
  }
 }

}

Ciò richiede correttamente la classe di fabbrica prima, e poi instansiates principale e chiama init (). Ma come ho già detto il precarico non viene mai mostrato come sembra essere il caricamento di tutto subito.

Si tratta di un problema con il modo in cui sto incorporare le immagini o perché sto testando a livello locale?

Chiunque altro incontrare questi problemi?

Grazie Ricco

È stato utile?

Soluzione

Ho usato con successo questo stesso metodo in tutti i miei giochi, deve essere testato in remoto, come test locale carichi auto praticamente tutti i byte prima che il caricatore può reagire.

Quindi sì, è perché si sta testando a livello locale. Carica il file SWF al server web e si può vedere lo stato di avanzamento carico effettivo da lì. Artificialmente gonfiore file ai fini del test non farà male pure, se si dispone di una connessione veloce.

Altri suggerimenti

Quale versione di Flash stai usando? So opere pre-carico in modo molto diverso in CS2, allora lo fa in CS3. Ho avuto un problema simile ottenere un pre-loader per lavorare in CS3 un po 'indietro.

http://www.senocular.com/flash/tutorials/faq/

Per riassumere con AS3 l'intera libreria di un file SWF sarà scaricato prima di prendere qualsiasi altra azione. Per risolvere questo problema si può dire ogni voce di libreria non caricare nel fotogramma 1, e quindi configurare il preloader nel primo fotogramma.

Un'altra soluzione sarebbe quella di avere un file SWF separato per fare il pre-caricamento. Non appena i vostri pre-loader carichi SWF su esso potrebbe utilizzare l'oggetto Loader per caricare il file SWF più grande. L'oggetto Loader quindi fornisce modi per ottenere la quantità di dati è stato caricato attraverso eventi.

Una terza soluzione potrebbe essere quella di caricare il file SWF a un sito come MochiAds e permettere loro di fornire le funzionalità di pre-caricamento. Se si sta facendo un gioco di questa sarebbe la soluzione più semplice.

Non sto utilizzando Flash, in modo che il non expoting sulla prima soluzione fotogramma di cui sopra non è un'opzione perché non ho accesso diretto alla biblioteca o timeline. Il metodo di fabbrica è un modo per raggiungere questo obiettivo in puro ActionScript, neccessary se si sta sviluppando al di fuori del IDE Flash.

Dopo un po 'di ricerca, ho trovato il problema è venuto dalla realizzazione con FlashDevelop. In realtà c'è una costruito nel modello nella versione più recente FlashDevelop che consente di ottenere lo stesso risultato, senza unneccesarily l'importazione di un sacco di componenti Flex.

Controlla questo post se avete bisogno di ulteriori informazioni

http://www.flashdevelop.org/community/viewtopic .php? f = 13 & t = 3365

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top