2011-02-25 11 views
5

estoy pasando de AS2 a AS3 y, probablemente, la mayor cantidad de PPL antes de encontrar esta incompatibilidad:AS3 - gotoAndStop con una acción inmediata

que utiliza muy a menudo un código como:

gotoAndStop(5); 
trace(box); //where box is a movie on 5th frame 

¿Cuál es la manera más fácil cómo hacerlo en AS3.

Respuesta

5

no es una manera fácil de hacer eso.

lo que tiene que hacer es

  • configuración de un oyente para cuando la trama hace que

  • decirle que se vaya a dicho bastidor (5)

  • fuerza de la prestación de suceder lo antes posible stage.invalidate

.

Una de las principales razones para quedarse con as2. No diciendo que as2 es mejor, solo mejor en algunas cosas y esta es una de ellas. Mi opinión sobre esto es que as3 en realidad no estaba destinado a manejar los plazos muy bien.

con AS2 que hacen

gotoAndStop(5); 
trace(box); 

Con AS3 que es necesario esperar a la línea de tiempo de render.

stage.addEventListener(Event.RENDER, onRenderStage); 
protected function onRenderStage(ev:Event):void { 
    trace(this['box']); 
} 
gotoAndStop(5); 
stage.invalidate(); 

que solía tener diferentes activos en diferentes marcos de una MovieMlip en mis días AS2, pero para ello en AS3 es demasiado complicado para disfrutar de cualquiera de los beneficios. Entonces, aunque esto funcionará, recomendaría buscar una solución diferente por completo. O apegarse a as2.

+0

AS3 debe asegurarse de que no pierde el contexto para el resto de las acciones en el marco original, es por eso que hace el movimiento al final de todos ... ese es el precio de la compilación de JIT, supongo. – Oldes

7

Hay una manera fácil de resolver esto, pero no está documentado:

addFrameScript(1, update); 
gotoAndStop(2); 

function update() { 
    trace(box); // outputs [object MovieClip] 
} 

Tenga en cuenta que el primer argumento para addFrameScript es el número de cuadro, pero es basado en 0, es decir, 0 es el marco 1, 1 es el cuadro 2, etc ... El segundo argumento es la función que le gustaría llamar.