Hola buho, primero decirte que no quiero liar nada, sólo doy mi opinión en base a mi experiencia.
buho29 escribió:
danisan escribió:
Programando todo el motor del juego en un único enterFrame se consigue que, juegues en la máquina que juegues, todos alcancen en 3 minutos el mismo número de escuadrones. Los de la máquina más vieja no lo verán igual de fluido que los de la nueva, pero hay consistencia.
Eso es una aberracion y no lo recomiendo a nadie o al menos q haga pruebas
Meter todo el code en un enterFrame es la muerte para cualquier cpu , ultimageneracion incluido.
No es ninguna aberración. Que el motor de un juego corra a cargo de un único enterFrame no significa que esté continuamente ejecuntándose todo el código. Para eso existen condicionales, tengo arrays que actúan como recolectores de basura para elementos que ya no necesito, etc.
Es más, cuanto más grande es el proyecto más prefiero tener un único enterFrame que no 100 dispersos por la película.
buho29 escribió:
Tengo un ejemplo (mira en cristalab) donde hay un especie de menu 3D , cada letra tiene su enterFrame y la cosa va mas o menos bien ... ,pero si lo meto en un solo enterFrame eso es quemar la cpu , no puede , en el ejemplo se mueve 80 mc ...
Muy bueno el efecto

Mira, tu código ejecutado en un único enterFrame:
Código :
MovieClip.prototype.carusel = function() {
if (_root._xmouse>centrox) {
direccion = -1;
} else {
direccion = 1;
}
velocidad = Math.abs((_root._xmouse-centrox)/(275/velocidadmaxima));
this.angulo += (velocidad*direccion);
this._x = centrox+Math.cos((Math.PI/180)*this.angulo)*2*radio;
this._y = centroy+Math.sin((Math.PI/180)*this.angulo*7)*radio/-10;
this.z = Math.sin((Math.PI/180)*this.angulo)*radio;
this._alpha = this._yscale=this._xscale=(100*distanciafocal)/(distanciafocal+this.z);
};
_root.onEnterFrame = function()
{
for (var a in listaLetras)
{
listaLetras[a].carusel()
}
}
//para ir sumando la profundidad
function maxprofundidad() {
return ++profundidad;
}
//inicio variables
centrox = 500/2;
centroy = 500/2;
radio = 100;
velocidadmaxima = 3;
distanciafocal = 180;
listaLetras = new Array();
//creando los titulos
titulos.text = ".: Escribe cualquier tonteria en el campo de texto :. ";
//creando los clips q contendran las letras
function creaLetras() {
var letras = new Array();
for (var i = 0; i<=titulos.text.length; i++) {
letras[i] = titulos.text.substr(i, 1);
var letra = this.attachMovie("letrita", "letrita"+i, i+1);
letra.angulo = Math.round((360/titulos.length)*i);
letra.contenido.text = letras[i];
// --------- letra.carusel(); ----------------------------
listaLetras.push(letra);
}
}
function borraLetras() {
trace(listaLetras.length);
for (var i = 0; i<listaLetras.length; i++) listaLetras[i].removeMovieClip();
listaLetras = [];
profundidad = 1;
}
creaLetras();
boton.onPress = function() {
borraLetras();
creaLetras();
};
stop();
Como puedes ver lo único que he hecho es quitar el enterFrame del prototipo, crear un único enterFrame en el _root y aprovechando que ya tenías el array con todas las letras hacer un for...in para moverlas. Ahora comprueba el rendimiento de los swf, primero con tu código y luego con el mío, y verás que no varía. Tú frase de
si lo meto en un solo enterFrame eso es quemar la cpu , no puede no es correcta. Es lo mismo 1 enterFrame moviendo 80 clips que 80 enterFrames moviendo 1 clip.
buho29 escribió:
Bien setInterval trabaja a ciclo de cpu , trabaja por tiempo ..., si tu te haces un setInterval q llame a una funcion cada 0.0001 sg , lo va a cumplir a raja tabla , las operaciones se haran , pero el problema es q flash visualiza en fps , si tu lo tienes A 1 fps , se vera un cuadro cada segundo , las operaciones se ejecutan pero no los ves .
Ahí tienes toda la razón, y por eso yo quería explicar que muchas veces, usando un setInterval, dependiendo de la máquina, flash no va a ser capaz de visualizar todo lo que le pidamos. En cambio, con enterFrame siempre te lo va a dar en cualquier máquina.
Si pusieramos un pelota en el punto x =10 en el fotograma 1 y la pelota en el x=100 en el fotograma 10 y moviéramos de 10px en 10px, en cada fotograma veríamos la pelota en las posiciones 20, 30, 40, etc. En cambio, con setInterval, corremos el riesgo que, a pesar de que flash ejecuta las operaciones (como dices tú, lo va a cumplir a rajatabla) no sea capaz de dibujarla en cada punto, con lo que a lo mejor veríamos la pelota en el punto 20, 50, 80 y 100.
Está claro que con un simple objeto no sucederá, pero puede pasar con muchos objetos moviéndose por pantalla. He citado el caso de los juegos porque es aquí donde se aprecia mucho usar un método u otro. Con eso me refería yo a dar consistencia, conque todo el mundo vea la pelota cada 10px sin que importe la máquina.
Bueno buho, espero haberme explicado mejor que la vez anterior
Saludos!