Vengo leyendo cristalab desde que mi profe de flash me lo recomendó como gran pozo de sabiduría
El caso es que ahora estoy intentando hacer un juego en actionscipt 3 y me he encontrado con un problema muy raro.
El juego se basa en ir por una calle con sus casas y los buzones. Con lo que los buzones se van desplazando de arriba a bajo como si fuera que paseas por la calle y vas dejando atras los buzones.
Para ello tengo un movieclip de un buzon, el cual se descompone como si le dieran un golpe. Creo varías instancias de tipo buzón y las desplazo hacia abajo de la pantalla conforme muevo el personaje. Hasta aquí bien.
El problema viene cuando, al estar en perspectiva la calle, hago que los buzones sean mas pequeños cuando aparecen por el horizonte y se van haciendo mas grande conforme se acercan. Para ello empleo el atributo scaleX y scaleY, pero nose pq el moviclip aumenta de tamaño pero sin moverse del sitio o se invierte en cuanto avanzo un poco.
El codigo que empleo es el siguiente:
La logica del juego:
Código ActionScript :
function moverObjetos(event:Event) {
var velocidad:Number = 2;
var velocidad2:Number = 1;
//Movemos el coche segun la tecla que se halla pulsado
if (flechaIzq) {
icoche.moverIzq(velocidad);
} else if (flechaArriba) {
icoche.moverArriba(velocidad);
//segun se aleja hacemos el coche mas pequeño
icoche.reEscalar(-0.01);
//movemos los buzones havia abajo se hacen menores
for (var i:int = 0; i<4; i++) {
buzones[i].moverAllAbajo(velocidad2);
buzones[i].reEscalar(-0.1);
}
} else if (flechaDer) {
icoche.moverDer(velocidad);
} else if (flechaAbajo) {
icoche.moverAbajo(velocidad);
//segun se acerca hacemos el coche mas grande
icoche.reEscalar(0.01);
//movemos los buzones havia arriba se hacen mayores
for (i = 0; i<4; i++) {
buzones[i].moverAllArriba(velocidad2);
buzones[i].reEscalar(+0.1);
}
}
}
Y las funciones del objeto buzon implicadas son:
public function reEscalar(escala:Number) {
if ((this.scaleX > 0.0) && (this.scaleY > 0.0)) {
this.scaleX += escala;
this.scaleY += escala;
}
}
public function moverAllAbajo(velocidad: Number) {
//Buzon de la acera izquierda
if (this.posIzq) {
this.moverIzq(velocidad);
} else {//Si esta en la acera derecha
this.moverDer(velocidad);
}
this.moverAbajo(velocidad);
}
public function moverAllArriba(velocidad: Number) {
//Buzon de la acera izquierda
if (this.posIzq) {
this.moverDer(velocidad);
} else {//Si esta en la acera derecha
this.moverIzq(velocidad);
}
this.moverArriba(velocidad);
}
He aislado las líneas que dimensionan el buzón y entonces estos se desplazan correctamente, por lo que el error tiene que estar en el reEscalado, pero la vdd es que se me escapa. A ver si alguien me puede hechar una anita, gracias:D
