Foros del Web » Creando para Internet » Flash y Actionscript »

[SOLUCIONADO] Objeto nulo en preloader AS3

Estas en el tema de Objeto nulo en preloader AS3 en el foro de Flash y Actionscript en Foros del Web. Hola a todos, estoy trabajando con el siguiente preloader en AS3 : @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código ActionScript: Ver original package preload {         ...
  #1 (permalink)  
Antiguo 21/10/2010, 10:29
Avatar de dvpareja  
Fecha de Ingreso: junio-2010
Ubicación: Vélez-Málaga
Mensajes: 126
Antigüedad: 14 años, 5 meses
Puntos: 11
Pregunta Objeto nulo en preloader AS3

Hola a todos,

estoy trabajando con el siguiente preloader en AS3 :

Código ActionScript:
Ver original
  1. package preload
  2. {
  3.    
  4.     import flash.display.Stage;
  5.     import flash.display.MovieClip;
  6.     import flash.display.Shape;
  7.     import flash.text.TextField;
  8.     import flash.events.*
  9.  
  10.  
  11.  
  12.    public class PreloadBasico extends MovieClip
  13.    {
  14.       private var texto:TextField;
  15.       private var marco:Shape;      
  16.       private var barra:Shape;
  17.        
  18.       public function PreloadBasico ()
  19.       {
  20.          dibujaPreload();
  21.          posicionaPreload();
  22.          this.loaderInfo.addEventListener(ProgressEvent.PROGRESS, onLoadProgress);
  23.          this.loaderInfo.addEventListener(Event.COMPLETE, onLoadComplete);
  24.  
  25.       }
  26.    
  27.       public function dibujaPreload() {
  28.          texto = new TextField();
  29.          marco = new Shape();
  30.          barra = new Shape();
  31.          marco.graphics.lineStyle(1, 0x000000);
  32.          marco.graphics.drawRoundRect(0, 20, 70, 5, 0);
  33.          barra.graphics.beginFill(0x000000);
  34.          barra.graphics.drawRect(0, 20, 70, 5);
  35.          barra.graphics.endFill();  
  36.          addChild(texto);
  37.          addChild(marco);
  38.          addChild(barra);
  39.       }
  40.       public function posicionaPreload() {
  41.          trace (texto.x);
  42.          texto.x = marco.x = barra.x = stage.stageWidth /2 - marco.width /2
  43.          texto.y = stage.stageHeight /2 - texto.height /2
  44.          marco.y = barra.y = texto.y + 5
  45.       }
  46.       function onLoadProgress (event:ProgressEvent):void
  47.          {
  48.             var cargado:int = event.bytesLoaded;
  49.             var total:int = event.bytesTotal;
  50.             var porcentaje:int = cargado/total*100;
  51.             texto.text = "Cargado: "+String(porcentaje)+"%";
  52.             barra.width = porcentaje*marco.width/100;
  53.          }
  54.          //----------------------------------------
  55.       function onLoadComplete (event:Event):void
  56.          {
  57.             removeChild(texto);
  58.             removeChild(marco);
  59.             removeChild(barra);
  60.             nextFrame();
  61.          }
  62.  
  63.    
  64.    }
  65. }

y lo llamo desde el primer frame

Código ActionScript:
Ver original
  1. import preload.*;
  2. var preloader:PreloadBasico = new PreloadBasico;
  3. stop();

pero me devuelve este error :

TypeError: Error #1009: No se puede acceder a una propiedad o a un método de una referencia a un objeto nulo.
at preload::PreloadBasico/posicionaPreload()
at preload::PreloadBasico$iinit()
at precios_fla::MainTimeline/precios_fla::frame1()

¿podríais decirme que tengo que corregir?

Gracias
  #2 (permalink)  
Antiguo 21/10/2010, 13:42
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 15 años, 2 meses
Puntos: 214
Respuesta: Objeto nulo en preloader AS3

Hola
pues el código se ve bien, intenta dejando en comentario
el listener de la función de evento complete a ver si tal vez
con eso se solucione

si aún asi persiste, intenta llamar la función de posicionamiento
en la de progreso, y si nada, entonces no se me ocurre nada más
que ir comentando más secciones hasta dar con la parte
donde se esta dando el inconveniente
saludos
__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com
  #3 (permalink)  
Antiguo 21/10/2010, 14:30
Avatar de dvpareja  
Fecha de Ingreso: junio-2010
Ubicación: Vélez-Málaga
Mensajes: 126
Antigüedad: 14 años, 5 meses
Puntos: 11
Respuesta: Objeto nulo en preloader AS3

Gracias por tu respuesta Mortiprogramador, he intentado lo siguiente:

Código Actionscript:
Ver original
  1. public function PreloadBasico ()
  2.       {
  3.          dibujaPreload();
  4.         // posicionaPreload();
  5.          this.addEventListener(Event.ADDED, posicionaPreload) //<-- He añadido esta línea
  6.         // this.loaderInfo.addEventListener(ProgressEvent.PROGRESS, onLoadProgress);
  7.           // this.loaderInfo.addEventListener(Event.COMPLETE, onLoadComplete);
  8.  
  9.       }

Así no da error, dibuja el rectángulo en pantalla, y se para.
En el momento que quito el comentario de la línea de ProgressEvent, me devuelve el mismo error de ejecución.
  #4 (permalink)  
Antiguo 21/10/2010, 15:25
Avatar de dvpareja  
Fecha de Ingreso: junio-2010
Ubicación: Vélez-Málaga
Mensajes: 126
Antigüedad: 14 años, 5 meses
Puntos: 11
Respuesta: Objeto nulo en preloader AS3

Tal y como decías, así funciona :
Código Actionscript:
Ver original
  1. package preload
  2. {
  3.     import flash.display.*;
  4.     import flash.text.TextField;
  5.     import flash.events.*
  6.  
  7.  
  8.  
  9.    public dynamic class PreloadBasico extends MovieClip
  10.    {
  11.       private var texto:TextField;
  12.       private var marco:Shape;      
  13.       private var barra:Shape;
  14.        
  15.       public function PreloadBasico ()
  16.       {
  17.          dibujaPreload();
  18.          this.addEventListener(Event.ADDED, posicionaPreload)
  19.         // this.loaderInfo.addEventListener(Event.COMPLETE, onLoadComplete);   
  20.  
  21.  
  22.       }
  23.  
  24.    
  25.       public function dibujaPreload() {
  26.          texto = new TextField();
  27.          marco = new Shape();
  28.          barra = new Shape();
  29.          marco.graphics.lineStyle(1, 0x000000);
  30.          marco.graphics.drawRoundRect(0, 20, 70, 5, 0);
  31.          barra.graphics.beginFill(0x000000);
  32.          barra.graphics.drawRect(0, 20, 70, 5);
  33.          barra.graphics.endFill();  
  34.          addChild(texto);
  35.          addChild(marco);
  36.          addChild(barra);
  37.          
  38.       }
  39.       public function posicionaPreload(event:Event)
  40.       {
  41.          texto.x = marco.x = barra.x = stage.stageWidth /2 - marco.width /2
  42.          texto.y = stage.stageHeight /2 - texto.height /2
  43.          marco.y = barra.y = texto.y + 5
  44.          this.loaderInfo.addEventListener(ProgressEvent.PROGRESS, onLoadProgress);
  45.       }
  46.       function onLoadProgress (event:ProgressEvent):void
  47.          {
  48.             var cargado:int = event.bytesLoaded;
  49.             var total:int = event.bytesTotal;
  50.             var porcentaje:int = cargado/total*100;
  51.             texto.text = "Cargado: "+String(porcentaje)+"%";
  52.             barra.width = porcentaje*marco.width/100;
  53.          }
  54.          //----------------------------------------
  55.       function onLoadComplete (evento:Event):void
  56.          {
  57.             removeChild(texto);
  58.             removeChild(marco);
  59.             removeChild(barra);
  60.             nextFrame();
  61.          }
  62.  
  63.    
  64.    }
  65. }

ya solo queda el final, si descomento la linea del evento COMPLETE da el mismo error.
  #5 (permalink)  
Antiguo 21/10/2010, 15:31
Avatar de dvpareja  
Fecha de Ingreso: junio-2010
Ubicación: Vélez-Málaga
Mensajes: 126
Antigüedad: 14 años, 5 meses
Puntos: 11
Respuesta: Objeto nulo en preloader AS3

Ya casi está solucionado. Con el código, tal y como lo pongo a continuación, si hago una simulación de descarga, funciona perfectamente. Sale el preloader, y carga el siguiente frame. Pero si lo ejecuto normal, o en web, carga el preloader y no salta al siguiente frame. Esto ya es la pera !!

Código Actionscript:
Ver original
  1. package preload
  2. {
  3.     import flash.display.*;
  4.     import flash.text.TextField;
  5.     import flash.events.*
  6.  
  7.    public class PreloadBasico extends MovieClip
  8.    {
  9.       private var texto:TextField;
  10.       private var marco:Shape;      
  11.       private var barra:Shape;
  12.        
  13.       public function PreloadBasico ()
  14.       {
  15.          dibujaPreload();
  16.          this.addEventListener(Event.ADDED, posicionaPreload)
  17.       }
  18.  
  19.    
  20.      public function dibujaPreload() {
  21.          texto = new TextField();
  22.          marco = new Shape();
  23.          barra = new Shape();
  24.          marco.graphics.lineStyle(1, 0x000000);
  25.          marco.graphics.drawRoundRect(0, 20, 70, 5, 0);
  26.          barra.graphics.beginFill(0x000000);
  27.          barra.graphics.drawRect(0, 20, 70, 5);
  28.          barra.graphics.endFill();  
  29.          addChild(texto);
  30.          addChild(marco);
  31.          addChild(barra);
  32.          
  33.       }
  34.       public function posicionaPreload(event:Event)
  35.       {
  36.          texto.x = marco.x = barra.x = stage.stageWidth /2 - marco.width /2
  37.          texto.y = stage.stageHeight /2 - texto.height /2
  38.          marco.y = barra.y = texto.y + 5
  39.          this.loaderInfo.addEventListener(ProgressEvent.PROGRESS, onLoadProgress);
  40.          this.loaderInfo.addEventListener(Event.COMPLETE, onLoadComplete)
  41.       }
  42.       function onLoadProgress (event:ProgressEvent):void
  43.          {
  44.             var cargado:int = event.bytesLoaded;
  45.             var total:int = event.bytesTotal;
  46.             var porcentaje:int = cargado/total*100;
  47.             texto.text = "Cargado: "+String(porcentaje)+"%";
  48.             barra.width = porcentaje*marco.width/100;
  49.          }
  50.          //----------------------------------------
  51.       function onLoadComplete (event:Event):void
  52.          {
  53.            
  54.             removeChild(texto);
  55.             removeChild(marco);
  56.             removeChild(barra);
  57.             this.nextFrame();
  58.          }
  59.  
  60.    
  61.    }
  62. }

Última edición por dvpareja; 21/10/2010 a las 15:50
  #6 (permalink)  
Antiguo 21/10/2010, 15:53
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 15 años, 2 meses
Puntos: 214
Respuesta: Objeto nulo en preloader AS3

bueno, intenta entonces cambiar el nextFrame por un
gotoAndPlay a ver si cambia algo
__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com
  #7 (permalink)  
Antiguo 21/10/2010, 15:55
Avatar de dvpareja  
Fecha de Ingreso: junio-2010
Ubicación: Vélez-Málaga
Mensajes: 126
Antigüedad: 14 años, 5 meses
Puntos: 11
Respuesta: Objeto nulo en preloader AS3

Lo intenté, pero tampoco.
  #8 (permalink)  
Antiguo 21/10/2010, 16:01
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 15 años, 2 meses
Puntos: 214
Respuesta: Objeto nulo en preloader AS3

tienes la url de la web para probar?
cuando dices que haces una simulación, esto es
exportandolo desde el fla y probando el swf resultante
en ese justo instante?
__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com
  #9 (permalink)  
Antiguo 21/10/2010, 16:05
Avatar de dvpareja  
Fecha de Ingreso: junio-2010
Ubicación: Vélez-Málaga
Mensajes: 126
Antigüedad: 14 años, 5 meses
Puntos: 11
Respuesta: Objeto nulo en preloader AS3

La URL donde hago las pruebas es en

http://desarrollo.ddweb.es/test/precios.html

puedes verlo tu mismo, pero no es ahí la simulación que funciona, es en el simulador de descarga de flash.

Tengo puesto una imagen de 1MB en el frame 2, para ver si funciona.

Puedes bajarte el archivo

http://desarrollo.ddweb.es/test/precios.fla
  #10 (permalink)  
Antiguo 21/10/2010, 16:14
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 15 años, 2 meses
Puntos: 214
Respuesta: Objeto nulo en preloader AS3

uhm, bueno, pues me sale esto

Advertencia: broadcastMessage no es una función
Advertencia: se ha alcanzado el límite de advertencia de 100
NetStream.Play.Start
NetStream.Buffer.Full
NetStream.Buffer.Empty
NetStream.Buffer.Full
Error: El intento de carga de http://www.actionscript.org/forums/a...chmentid=18177 ha fallado, ya que tenÃ*a definido un encabezado Content-Disposition de "attachment".
Advertencia: se encontró AllowScriptAccess='never' en HTML. Esta configuración ya no es efectiva y dejará de funcionar. Consulte http://www.adobe.com/go/allowscriptaccess_es para obtener más información.
!! kontera layer --> version: msn 10/06/2009

tal vez sea algo de eso no?
bueno, revisa eso
saludos
__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com
  #11 (permalink)  
Antiguo 21/10/2010, 16:16
Avatar de dvpareja  
Fecha de Ingreso: junio-2010
Ubicación: Vélez-Málaga
Mensajes: 126
Antigüedad: 14 años, 5 meses
Puntos: 11
Respuesta: Objeto nulo en preloader AS3

Dios !! ¿Dónde te ha salido eso? No lo he visto por ningún sitio.
  #12 (permalink)  
Antiguo 21/10/2010, 16:24
Avatar de dvpareja  
Fecha de Ingreso: junio-2010
Ubicación: Vélez-Málaga
Mensajes: 126
Antigüedad: 14 años, 5 meses
Puntos: 11
Respuesta: Objeto nulo en preloader AS3

Resuelto. Menuda tontería, y no entiendo por qué.

¡ Le he quitado el Stop() al fotograma 1 y así funciona !

Etiquetas: nulo, objeto, preloader
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 00:05.