reproducir diferentes marcos al hacer clic en flash

Tengo 2 símbolos en un marco: ciervo y hombre. Quiero detener la película flash en el fotograma 45 y si el usuario hace clic en el ciervo, reproduzca los fotogramas 50-100, pero si el usuario hace clic en el hombre, quiero reproducir el fotograma 200 - 250. El código que tengo en el fotograma 45 es:

stop();
var _buttons:Array = [deer, man];

for(var i = 0; i < _buttons.length; i++){
    _buttons[i].onRelease = function() {
        gotoAndPlay(100);
    }

    _buttons[i].onRelease = function() {
        gotoAndPlay(200);
    }
}

cuando la película se detiene en el cuadro 45 y hago clic en un objeto, no sucede nada, pero no hay errores.

preguntado el 28 de julio de 12 a las 15:07

Intenta eliminar private palabra antes function. -

entonces me sale un error interface 'MouseEvent' could not be loaded. -

Tiene que haber un import flash.events.MouseEvent antes del resto de su código. -

@PranavHosangadi Recibo un error interface 'flash.events.MouseEvent' could not be loaded. ? -

Esto parece ser una idiosincrasia de AS2, algo en lo que dejé de poner mi cabeza hace mucho tiempo. Si está creando algo nuevo, ¿por qué no usar AS3? -

3 Respuestas

Si está utilizando ActionScript 2, el problema con el que se encuentra es un problema clásico relacionado con el alcance del objeto. No es culpa de ActionScript 2, sino de la especificación de JavaScript. Considere el siguiente fragmento

trace(this);  // it displays the movieclip that hosts the button
myButton.onRelease = function() {
    trace(this);  //oops, it is the button, not the host.
}

Un truco rápido para evitar esto sin recurrir a _root sería

stop();
var _buttons:Array = [deer, man];

trace("deer button: " + deer);
deer.context = this;
deer.onRelease = function() {
    trace("deer button is clicked.");
    deer.context.gotoAndPlay(100);
}

trace("man button: " + deer);
man.onRelease = function() {
    trace("man button is clicked.");
    man.context.gotoAndPlay(200);
}

Una implementación mucho más elegante sería usar delegar, por lo que no tiene que codificar las propiedades _root o "contextual".

Respondido 28 Jul 12, 19:07

Pegué esto exactamente y solo cambié el nombre del botón, pero tengo el mismo problema. - solo eric

Bueno, asegurémonos de que se consuma el evento del botón. He actualizado el código anterior, por lo que puede ver si se activa la declaración de seguimiento. - tianzhen lin

tratar:

deer.onRelease = function() {
   this.gotoAndPlay(50);
   // make sure that is an stop(); Action on frame 100
}

man.onRelease = function() {
   this.gotoAndPlay(200);
   // make sure that is an stop(); Action on frame 250
}

¿Cómo nombraste el Moviclip sensible o Button - "venado" y "hombre"? Es mejor que trabaje con fotogramas con nombre y no con el número de fotograma. Vaya a un fotograma clave y cambie el nombre del fotograma clave. Entonces puedes escribir por ejemplo: this.gotoAndPlay("man_start");

Lo etiquetas como AS2 - Espero poder ayudarte. Saludos

EDITAR: asegúrese de tener la ruta correcta para gotoAndPlay. Puede escribir, por ejemplo, _root.gotoAndPlay("man_start") cuando el botón/clip esté en la línea de tiempo raíz. Si el botón está en el clip de hombre, puede escribir, por ejemplo:

deer.your_named_button.onRelease = function() {
    this._parent.gotoAndPlay("man_start");
}

Respondido 28 Jul 12, 17:07

Hola, gracias por esta respuesta, pero debo estar haciendo algo mal. Hice todo lo que dijiste pero tengo todo en una sola capa. Y estoy poniendo este script en el panel de fotogramas de acción. ¿Quizás eso también es un problema? - solo eric

De acuerdo, tienes todos los elementos en una línea de tiempo y no en un clip, ¿verdad? - Deerio

sí, todo está en la línea de tiempo - solo eric

De acuerdo, en esta línea de tiempo tienes los elementos: ciervo y hombre. ¿Lo conviertes como un Movieclip o como un botón? - Deerio

Intente: haga una nueva capa llamada Marcadores y una nueva capa llamada acciones. En las acciones de la capa, establece un fotograma clave vacío (F6) en los fotogramas 0, 50, 100, 200, 250 y escribe en cada fotograma clave (0, 50, 100, 200, 250) la acción: detener (); En la capa de marcadores, establece los fotogramas clave vacíos en el fotograma 0, 100, 200. Haga clic en cada fotograma clave (que no haya elegido un clip u otra cosa, solo el fotograma clave) y nombre el fotograma 0 "inicio", el fotograma 100 "play_deer", fotograma 200 "play_man". - Deerio

Ahora puede escribir en el panel de acción desde el primer fotograma clave ("inicio", fotograma clave 0):

stop(); // you have write it in the first step

// klick on your deer button and name it "deer_btn", if isn't it
deer_btn.onRelease = function() {
    _root.gotoAndPlay("play_deer");
    trace("I pressed deer_btn"); // can you delete later
}

// klick on your man button and name it "man_btn", if isn't it
man_btn.onRelease = function() {
    _root.gotoAndPlay("play_man");
    trace("I pressed man_btn"); // can you delete later
}

Esto debería funcionar, pero no se ha probado. No Flash en el portátil. Espero que te ayude. No puede - pregúntame.

Respondido 28 Jul 12, 18:07

No sé. No puedo verlo, lo que estás haciendo - lo siento. Cómo escribe Tianzhen Lin, creo que es realmente un problema de alcance. Si recibes los avisos "Presioné..." Entonces sabes que tus botones inician la acción y esta parte es correcta. Ahora debo ir a comer y vuelvo mañana. ¡Buena suerte! - Deerio

Muchas gracias de verdad aprecio tu ayuda. ¡Dios bendiga! - solo eric

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.