Convertir preload de AS3 a AS2
Buenas a todos los domestikeros,
A ver como explico esto para que no sea un caos :D.
Me está dando algún que otro problema un preloader que compré en ACTIVEDEN y que he tenido que cambiar a AS2 ya que mi proyecto estaba hecho en AS2.
Antes de explicaros los 2 problemas, por favor, ver el ejemplo para poder haceros una mejor idea:
Precarga Original de ACTIVEDEN en AS3:
http://activeden.net/item/preloader-bubbles/93249
Mi preload en AS2:
http://colordeu.es/LP/main/preloaderBubbles_as2.html
Los problemas que seguramente ya habreis visto son:
- [*]Numeros de porcentaje: Como véis la numeración del porcentaje que se ha cargado (texto dinámico) no sale correctamente. No entiendo pq ya que en los DISPLAYS me salen bien.
Aquí os dejo el código de esta parte para ver si veis algún error:
total = _root.getBytesTotal();
cargados = _root.getBytesLoaded();
porcentaje = Math.floor((cargados*100)/total);
//percent_txt es un texto declarado como dinámico.
percent_txt.text = porcentaje + "";
- [*]Pelotas al centro: Las pelotas, si habeis visto en la web original de ACTIVEDEN, van hacia el centro dando la impresión que el circulo central blanco se va rellenando con las bolas. En mi ejemplo, hace el efecto como si estuviera rellenando, pero como véis no rota la animación de la bola al centro.
Código original de ACTIVEN en AS3:
Nota: pb_CircletOusie es un MovieClip que tiene como Identifier y Clase --> Pbco
function spawnPBCO(){
var newPBCO:Pbco = new Pbco();
newPBCO.x = 0;
newPBCO.y = 0;
newPBCO.rotation = Math.random()*360;
addChild(newPBCO);
}
Mi código en AS2:
Nota: He dejado el identifier como Pbco pero he quitado la clase, ya que me daba fallos en AS2.
function spawnPBCO(){
this.attachMovie("pb_CircletOutside","myPbco",200);
myPbco.x = 0;
myPbco.y = 0;
myPbco._rotation = Math.random()*360;
}
Espero podáis ayudarme porque ya no se que puede pasar.
Gracias de antemano ..
Saludos.
diego_lorenzo
Hola,
El link del original no se ve, a ver si puedes ponerlo para ver qué es lo que hace exactamente la precarga y poder ayudarte.
Saludos
lukanicos
BuenAS:
Así, a bote pronto, se me ocurren una serie de temas delicados:
En AS3 las propiedades YA NO LLEVAN guión bajo. O sea, que todas las propiedades a las que hagas referencia (_x, _y, _rotation...) ponle el guión bajo.
El addChild en AS3 es el equivalente al attachMovie en AS2, y veo que en AS3 el símbolo en la biblioteca se llama "Pbco" y nombre de instancia "newPBCO", y lo estás instanciando (atachando, bendito palabro) con "pb_CircletOutside" y "myPbco"
Un saludo.
lukanicos
...y otra cosa que intuyo puede ocurrir:
Si se trata de un preloader genérico, posiblemente llame a las propiedades del escenario:
stage.stageWidth
stage.stageHeight
Esto no existe en AS2. Si aparecen referencias en tu código, cambias por el ancho/alto de tu escenario. O sea, si el escenario es de 1024x768, cambia stage.stageWidth por 1024 y stage.stageHeight por 768.
danideu
Hola a todos,
Lo siento por el enlace erróneo. El bueno es este:
En cuanto a esas modificaciones son las que ya habia hecho, es decir, cambiar el adChild por el attachMovie ...
estoy agobiado ya con esto, le doy vueltas y vueltas y no se como sacarlo.
Gracias por la respuesta ..
lukanicos
BuenAS:
Pues no lo veo, el enlace digo.
En estos casos lo mejor es que vayas a tiro hecho. Imagino que lo que te interesa es la animación del preloader; se me ocurren dos caminos a seguir:
1.- Si dominas AS2, crea un nuevo Flash limpio de código, con el MovieClip del preloader que has adquirido y reescribe de cero todo el código.
2.- Si no dominas AS2, Intenet está lleno de ejemplos con código para hacer un preloader con un MovieClip. Aplicar el pto. 1. con el código que consigas.
Cristalab está lleno de ejemplos. Busca alguno que se te adecúe.
Un saludo.
danideu
SI eso es lo que hice .. Tampoco es que domine a la perfección AS2, pero es lo que he intentado desde el principio, he pillado la animación y la he puesto en AS2.
No se pq no ha salido antes, la pagina original del preloader .. http://activeden.net/item/preloader-bubbles/93249
Oye, y si te mando el archivo¿?
Me puedes escribir un mail desde mi Blog si no quieres dar el mail por aqui y ya te mando el archivo ahí.
Mi Blog: http://www.colordeu.es/BLOG
Saludos.
danideu
Mira, te voyu a poner el codigo original aqui, y despues mi codigo a ver que opinas, porque la parte del onterFrame ...mmm no se yo hasta que punto esta bien:
CODIGO ORIGINAL EN AS3
// keep the preloader on this frame until the movie is loaded
stop();
MovieClip(parent).stop();
// percent variable tracks what percent of the movie is loaded
var percent:Number = 0;
var oldPercent:Number = 0;
circle.width=0;
circle.height=0;
import flash.display.*;
// run the following code every time progress is made loading the movie
MovieClip(parent).loaderInfo.addEventListener (ProgressEvent.PROGRESS, loading);
function loading(event:ProgressEvent):void {
// updates the percent variable with the percent of the movie loaded
percent = Math.round(event.bytesLoaded/event.bytesTotal*100);
if(oldPercent<percent){
oldPercent=percent;
spawnPBCO();
}
// updates the textbox with the current percent
percent_txt.text = percent + "";
// updated the loading bar
circle.width=percent*.6;
circle.height=percent*.6;
// if the loading is complete, execute the finished() method
if(percent==100){
finished();
}
}
// plays the movie if it has loaded instantly
if(MovieClip(parent).loaderInfo.bytesLoaded==MovieClip(parent).loaderInfo.bytesTotal){
finished();
}
// runs when the loading is complete
function finished(){
// sets the text to 100 and the loading bar to full width
percent_txt.text = "100";
circle.width=60;
circle.height=60;
// removes listener from the loader
MovieClip(parent).loaderInfo.removeEventListener(ProgressEvent.PROGRESS,loading);
// plays the rest of the animation
play();
}
function spawnPBCO(){
var newPBCO:Pbco = new Pbco();
newPBCO.x = 0;
newPBCO.y = 0;
newPBCO.rotation = Math.random()*360;
addChild(newPBCO);
}
MI CODIGO EN AS2
// keep the preloader on this frame until the movie is loaded
stop();
_parent.stop();
var porcentaje;
var oldporcentaje;
circle.width=0;
circle.height=0;
//function cargando() {
onEnterFrame = function(){
// Declaración de variables
var total, cargados, porcentaje, oldporcentaje, rotacion;
// A la variable "total" se le asigna el tamaño de la pelicula en bytes
total = _root.getBytesTotal();
// A la variable "cargados" se le asignan el total de bytes hasta el
//momento descargados de la web
cargados = _root.getBytesLoaded();
//Por medio de una regla de tres obtiene el porcentaje cargado y redondea el valor con la función
//"Math.floor"
porcentaje = Math.floor((cargados*100)/total);
//trace("El porcentaje es: " + porcentaje);
//Asigna al campo de texto porcentaje_txt el porcentaje cargado
trace("porcentaje" + porcentaje);
trace("oldporcentaje" + oldporcentaje);
percent_txt.text = porcentaje + "";
if(oldporcentaje<percent){
oldporcentaje=porcentaje;
spawnPBCO();
}
//spawnPBCO();
circle._width = porcentaje * .6;
circle._height = porcentaje * .6;
// if the loading is complete, execute the finished() method
if (cargados == total) {
trace ("Se ha cargado completamente");
finished();
//clearInterval(hiloPrecarga);
delete this.onEnterFrame;
play();
}
}
// setInterval nos servira para que la función "cargando" se ejecute cada 1 milisegundo
// Asi, nuestra función revisara constantemente la cantidad de bytes descargados
// y solo iniciara la pelicula hasta que la descarga termine
// la variable "hiloPrecarga" nos servira para saber que esta corriendo nuestra función
// y frenar su ejecución cada milisegundo por medio de "clearInterval"
//var hiloPrecarga = setInterval(cargando, 1);
// runs when the loading is complete
function finished(){
// sets the text to 100 and the loading bar to full width
trace("Entra en finished");
percent_txt.text = "100";
circle.width=60;
circle.height=60;
_root.play();
}
function spawnPBCO(){
this.attachMovie("circulo","micirculo",getNextHighestDepth());
//micirculo._x = precarga_mc.circle._x;
//micirculo._y = precarga_mc.circle._y;
//micirculo._x = 0;
//micirculo._y = 0;
rotacion = Math.random()*360;
trace("Rotacion: " + rotacion);
micirculo._rotation = rotacion;
}