Problema con loader
Buenas, soy novato en AS3 y tengo un problema sutil... Tengo una programación que en el primer foto grama de la pelicula funciona de lujo, pero cuando la coloco en una clase para que este todo mas organizado, me hace el preload, todo sale perfecto pero no muestra la imagen en el escenario... A que se puede deber?? os dejo el codigo:
<code>package com{
import flash.display.Loader;
import flash.display.Sprite;
import flash.events.*;
import flash.display.*;
import flash.net.URLRequest;
class bionica extends Sprite{
//
//
// @: Esta es la función privada que creará los diferentes movieClips dentro de la pelicula:
public function bionica() {
trace("1.- Llamada: Prepara");
var url:String = "imagen.jpg";
var requested:URLRequest = new URLRequest(url);
//
// @: Clip principal donde se cargarán los clips 'trabajos':
var principal:Sprite = new Sprite();
this.addChild(principal);
//
// @: Creamos el cargador de imagenes:
var cargador:Loader=new Loader();
ponerListeners(cargador.contentLoaderInfo);
cargador.load(requested);
principal.addChild(cargador);
}
//Añade los listeners al cargador
function ponerListeners(dispatcher:IEventDispatcher):void {
dispatcher.addEventListener(Event.COMPLETE, completeHandler);
dispatcher.addEventListener(HTTPStatusEvent.HTTP_STATUS, httpStatusHandler);
dispatcher.addEventListener(Event.INIT, initHandler);
dispatcher.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
dispatcher.addEventListener(Event.OPEN, openHandler);
dispatcher.addEventListener(ProgressEvent.PROGRESS, progressHandler);
}
//Funcion que se ejecuta cuando termina la descarga.
function completeHandler(event:Event):void {
trace("completeHandler: " + event);
this.addChild(event.target.content);
}
//Se ejecuta al recibir un código de estado HTTP
function httpStatusHandler(event:HTTPStatusEvent):void {
trace("httpStatusHandler: " + event);
}
//Se distribuye cuando las propiedades del objeto cargado están disponibles
//A partir de su distribucion podriamos modificar el objeto (ancho, escala, etc)
function initHandler(event:Event):void {
trace("initHandler: " + event);
}
//Se ejecuta cuando hay un error de entrada/salida, por ejemplo, al intentar cargar un archivo inexistente
function ioErrorHandler(event:IOErrorEvent):void {
trace("ioErrorHandler: " + event);
}
//Se ejecuta cuando comienza la operación de carga
function openHandler(event:Event):void {
trace("openHandler: " + event);
}
//Se ejecuta periodicamente mientras dura la carga
function progressHandler(event:ProgressEvent):void {
trace("progressHandler: bytesLoaded=" + event.bytesLoaded + " bytesTotal=" + event.bytesTotal);
}
}
}
</code>
JaviBola
Nadie se anima? Venga que no se diga....
tpmmds
Hola:
Yo lo único que veo es que añades el cargador a la película principal, y esta al escenario, y después cuando se carga la imagen, vuelves a añadirla al escenario(en el método completeHandler). Esto hace que la imagen "salga" del loader y pase a estar directamente en el escenario. Pero, en principio, deberías verla aunque ya no esté en la película principal
Remarcar una cosa: cuando se carga cualquier tipo de contenido, existe SÓLO UNA VEZ. Si dicho contenido lo añades a otro movieClip (al escenario, en este caso), deja de estar en el loader.
Un saludo.
JaviBola
Cierto que se añade dos veces... fallo mio por copiar sin mirar los eventos primero. Voy a probar quitandolo, pero de todos modos ya te digo, ese mismo código fuera de clase y colocado en el primer fotograma funciona, cosa mas rara....
Muchas Gracias tpmmds!
tpmmds
Hola:
Sí, debe ser otra cosa independiente del loader, porque en principio deberías ver la imagen, en un sitio o en otro :-)
No sé, imagino que no será esto, pero suele pasar a veces: asegúrate de que el nombre de la clase es EXACTAMENTE el mismo de Clase de documento Yo para eso siempre suelo recurrir a copyAndPaste. Muchas veces falla una letra y no te das cuenta (escribes Claseprincipal, y el archivo se llama ClasePrincipal).
Un saludo.
JaviBola
Habia un fallo en la llamada a la clase desde el archivo .fla, aunque por el motivo que fuera no salia error alguno :S, ahora llamo a com.bionica y me sale lo siguiente:
1180: Llamada a un método addFrameScript posiblemente no definido.
Se me esta haciendo cuesta arriba el paso de AS2 a AS3... jeje.
Gracias por el interesss!! Un saludo! ;)
tpmmds
Hola:
Ah!! el famoso error del AddFrameScript. Casi seguro que estás llamando Sprite a algo que es MovieClip (que tiene línea de tiempo, frames). Revisa que la clase de documento no sea Sprite y que el timeline principal tenga más de 1 frame; o que hayas exportado para ActionScript algún movieClip (con más de 1 frame) como Sprite.
Un saludo