Lo había vivido con PCs más antiguas.
Más allá de que ahora esta es antigua también, quisiera sugerencias sobre cómo el juego puede funcionar más rápido.
El problema creo que siempre fueron los barriles cayendo, no hay límite de cuántos, pero cuando salen de la pantalla los quito, y no llega a haber tantos.
Se chequea si tocan la cabeza y cuerpo de Mario.
Pero se ha puesto mucho peor desde que agregué pisos. No es que vayan a quedar así, pero a ver cual sería la respuesta ajustada a este caso.

Cada línea de piso es una instancia de un movie clip: DK Piso
Cada movie clip de esos tiene muchas instancias del mismo dibujo: DK Piso parte.
Cuando Mario salta se chequea cuales pisos toca (los diferentes DK Piso).
Creo que la clave va por ahí ¿cómo conviene que sea?
Algunas alternativas son:
- Que no haya DK Piso partes.
- Que los dibujos sean bit maps.
Por lo que veo no estaba eliminando los barriles. No es tan fácil, este es el código relacionado:
function AddBarriles () {
BarrilesTurn = BarrilesTurn+BarrilesRate;
while (BarrilesTurn >= 100) {
BarrilesTurn = BarrilesTurn-100;
Barriles++;
Name = "Barril"+Barriles;
attachMovie("sDKBarril", Name, Barriles);
setProperty (Name, _x, Math.random()*800);
setProperty (Name, _y, -5);
set(Name+".SpeedX", Math.random()*MinBarrilSpeed*(random(2)*2-1));
set(Name+".SpeedY", Math.random()*MinBarrilSpeed+MinBarrilSpeed);
}
}
function MoveBarriles () {
BarrilaMover = 31;
while (BarrilaMover <= Barriles) {
Name = "Barril"+BarrilaMover;
setProperty (Name, _x, getProperty(Name, _x)+eval(Name+".SpeedX"));
setProperty (Name, _y, getProperty(Name, _y)+eval(Name+".SpeedY"));
// Pàra referirse al área de los barriles:
NroDeArea = 1;
do {
AreaaChequear = eval(Name)+".Area"+NroDeArea;
// Si tocan a Mario:
if (Player.Movie.Z1.hitTest(AreaaChequear) == true) {
trace("Golpeado en la cabeza");
// Game over:
gotoAndStop (3);
break;
} else if (Player.Movie.Z2.hitTest(AreaaChequear) == true) {
trace("Golpeado en el cuerpo");
// Game over:
gotoAndStop (3);
break;
}
NroDeArea++;
} while (NroDeArea < 4);
BarrilaMover++;
}
}
Se debería evitar que la cantidad de barriles se mantenga si algunos ya no están. Pero los que se eliminarían no son necesariamente los 1eros. En principio puedo poner una variable MenorNroDeBarril y así en vez de empezar desde el 31 (eso es porque hay 30 o 31 otras imágenes con un depth menor: Mario, los pisos...) se revisaría desde el valor de esa variable. Pero hay una solución mejor, que no se me ocurre bien, guardar en una lista los números de barriles eliminados y al agregar otros en vez de asignarles la cantidad de barriles (ejemplo hay 50, al nuevo le ponemos barril50) asignarle uno de esos números.
Por otro lado, en el while, si chequea si Mario está tocando un barril inexistente (borrado), no sé bien si no dará problemas.
Al pasar de pantalla todos los barriles desaparecen y en mi PC el juego vuelve a funcionar rápido, el tema es que no es posible pasar las pantallas antes de que se ponga muy lento.