Estoy haciendo con flash un recurso educativo sobre la electricidad y he conseguido un menú 3D que funciona a un fps de 100, pero a 12, como va el resto de la película, queda muy lento. La solución que se propone en el Tip es perfecta, pero no se como llevarla a la práctica, porque está relacionada con la carga de películas externas, lo que no es mi caso, pues el menú está acoplado a un fotograma mediante el siguiente código:
Código :
//proto q movera las letras
MovieClip.prototype.carusel = function(mover, posicionFinal) {
mueveAngulo(posicionFinal);
if (mover) {
this.onEnterFrame = function() {
this._x = centrox+Math.cos((Math.PI/180)*(angulo+this.angulo))*radio;
this._y = centroy+Math.sin((Math.PI/180)*(angulo+this.angulo))*radio/-20;
this.z = Math.sin((Math.PI/180)*(angulo+this.angulo))*radio;
this._alpha = this._yscale=this._xscale=(100*distanciafocal)/(distanciafocal+this.z);
this.swapDepths(-1*this.z);
};
} else {
delete this.onEnterFrame;
}
};
function mueveAngulo(posicionFinal) {
this.onEnterFrame = function() {
if ((Math.round(angulo)) == Math.round(posicionFinal)) {
mueveLetras(false);
trace(\"angulo\"+angulo+\"posicionFinal\"+posicionFinal);
delete this.onEnterFrame;
} else {
//contador de frames
if (counter++%30 == 1) {
// updates every 30 frames
thisTime = getTimer();
rate = Math.round(10000/(thisTime-lastTime))/10;
if (rate%1 == 0) {
rate += \".0\";
}
fps = \"fps: \"+rate;
} else if (counter%30 == 1) {
lastTime = getTimer();
}
angl.text = \"Angulo : \"+Math.round(angulo);
angulo += ((posicionFinal-angulo)/30);
}
};
}
//para ir sumando la profundidad
function maxprofundidad() {
return ++profundidad;
}
//inicio variables
centrox = 775/2;
centroy = 1020/2;
radio = 200;
distanciafocal = 400;
//creando los titulos
titulos = \"Electricidad Producción Transporte Usos Actividades Objetivos \";
//creando los clips q contendran las letras
function creaLetras() {
letras = new Array();
for (i=0; i<=titulos.length; i++) {
letras[i] = titulos.substr(i, 1);
var letra = this.attachMovie(\"letrita\", \"letrita\"+i, maxprofundidad());
letra.angulo.i = i;
letra.angulo = (360/titulos.length)*i;
letra.contenido.text = letras[i];
letra.carusel(true, 249);
//trace(letra);
}
}
creaLetras();
function mueveLetras(mover, posicionFinal) {
trace(this)
for (i=0; i<=titulos.length; i++) {
this[\"letrita\"+i].carusel(mover, posicionFinal);
}
}
b1.onPress = function() {
mueveLetras(true, 249);
};
b2.onPress = function() {
mueveLetras(true, 181);
};
b3.onPress = function() {
mueveLetras(true, 112);
};
b4.onPress = function() {
mueveLetras(true, 49);
};
b5.onPress = function() {
mueveLetras(true, -7);
};
b6.onPress = function() {
mueveLetras(true, -59);
};
stop();
/*posicion angulos
Principal
249
Laboratorio
-178,181
Tutoriales
-248,112
Descargar
-311,49
Enlaces
-367,-7
Contacto
-420,-59
//proto q movera el angulo
MovieClip.prototype.bounce = function(scalexFinal, scaleyFinal, multiplicador, cociente) {
var contar;
this.onEnterFrame = function() {
angulo = this.moviX*multiplicador+(scalexFinal-this._xscale)*cociente;
this._xscale += this.moviX;
this.moviy = this.moviy*multiplicador+(scaleyFinal-this._yscale)*cociente;
this._yscale += this.moviy;
if ((Math.round(this._xscale) == scaleFinal) && (contar++>40)) {
delete this.onEnterFrame;
}
};
};*/El código propuesto en el Tip (aparte de la clase .as) es
Código :
var carga:MovieClipLoader = new MovieClipLoader(); carga.loadClip(\"ani1.swf\", contenedor1); carga.loadClip(\"ani2.swf\", contenedor2); ani1 = new FrameRate(contenedor1, 12);
Y ahora la pregunta: ¿qué código deberé colocar en mi script para que funcione a la velocidad de 12?
Espero cierta piedad por vuestra parte, como para que me deis la respuesta mascadita, ya que mis conocimientos de action script son más que rudimentarios, pero aceptaré también indicaciones más crípticas. Es decir:cualquier aportación será bienvenida.
Gracias por haber llegado hasta aquí.
