Comunidad de diseño web y desarrollo en internet online

ERROR 1009 en Proyecto Flash, no puedo llamar movieclip d otra escena

Citar            
MensajeEscrito el 30 Oct 2013 02:26 pm
Estimados, tengo un problema de hace varios días.

Lo que pasa es que tengo una animación de una zapatilla en 360 y cuando pongo el proyecto el la escena 1, Frame 1, todo anda bien.

El problema es que quiero llamar a esa animacion desde un boton y esa animación la tire a la escena 2. Cuando hago clic al boton me tira el famoso error 1009, le puse unas trazas al codigo para ver si el objeto que me tira el error ohm_mc es nulo y en la Escena 1 no lo es, pero si lo es en la escena 2. Yo veo que el objeto está e la escena 2, así que no sé por qué me dice que es nulo. Seguramente me falta algo.

Les pido su ayuda, he visto en varios foros pero no he podido solucionar este problema. Subo el fuente por si alguien puede echarle un ojito. Se los agradecería enormemente.

aca el link:

http://www.mediafire.com/download/63fx5na1jhg8eef/Untitled-1.fla

Saludos

Por Evilgouki

3 de clabLevel



 

chrome
Citar            
MensajeEscrito el 30 Oct 2013 06:59 pm
Suponiendo que tienes un objetoA en el fotograma 20 y haces algo así

gotoAndStop(20)
objetoA.play()

Da error 1009, porque se ejecuta todo el código del fotograma antes de moverse al frame 20 efectivamente. Suena a que algo asi está pasando

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

chrome
Citar            
MensajeEscrito el 30 Oct 2013 07:28 pm
Y cómo lo podria solucionar amigo? Si quieres puedes ver el fuente (no es largo) para ver exactamente lo q me pasa

Por Evilgouki

3 de clabLevel



 

chrome
Citar            
MensajeEscrito el 30 Oct 2013 07:30 pm
No miro fuentes, pero si pones el código del boton y el error vamos viendo

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 30 Oct 2013 08:07 pm
Bueno, te explico:
Yo hice un proyecto de una zapatilla en 360 que consta de 4 layers:

fondo
(SimpleButton) girar_btn1 instanciado como girar_btn1
(MovieClip) ohm instanciado como ohm_mc
capa de Action Script

El proyecto original tiene todos esos objetos en el Frame 1 de la escena 1

Entonces moví todas esas capas y las puse en la Escena 2, Frame 1 y en la Escena 1 puse un simple boton para que me lleve a la escena 2.

El código del botón es (que está en el Frame 1, Scene 1)(bastante simple por lo demás):

stop();
boton_1.addEventListener(MouseEvent.CLICK,segundafuncion);
function segundafuncion (event:MouseEvent) :void {
gotoAndPlay(1, "Scene 2");
}

Cuando apreto ese botón me aparece el error:

TypeError: Error #1009: No se puede acceder a una propiedad o a un método de una referencia a un objeto nulo.
at Untitled_fla::MainTimeline/frame2()
at flash.display::Sprite/constructChildren()
at flash.display::Sprite()
at flash.display::MovieClip()
at Untitled_fla::ohmmc_14()
at flash.display::MovieClip/gotoAndPlay()
at Untitled_fla::MainTimeline/segundafuncion()

ese error ocurre en esta línea:
ohm_mc.addEventListener(MouseEvent.MOUSE_DOWN, clickHandler);

veo la escena 2 y efectivamente se encuentra el objeto ohm, instanciado como ohm_mc.
Además, antes de la línea del error, le agrego un actionlistener al botón y ese no me tira error, es el movieclip el que me tira ese error.

El código completo de la escena 2, Frame 1 es:

import flash.display.MovieClip;

// HANDLERS VARS
trace("testing ohm_mc presence ", ohm_mc, currentFrame);

var currPressedObject : *;
girar_btn.addEventListener(MouseEvent.MOUSE_DOWN, clickHandler);
girar_btn.addEventListener(MouseEvent.MOUSE_UP, clickHandler);

ohm_mc.addEventListener(MouseEvent.MOUSE_DOWN, clickHandler);
ohm_mc.addEventListener(MouseEvent.MOUSE_UP, clickHandler);

var indice_rotacion;
var fotograma_inicio;
var posicion_puntero;

function bringForward2(mcl:MovieClip) {
var currentDepth = mcl.parent.getChildIndex(mcl);
if(currentDepth<mcl.parent.numChildren-1){
mcl.parent.setChildIndex(mcl, currentDepth+1);
}
}

function bringForwardB(but:SimpleButton) {
var currentDepth = but.parent.getChildIndex(but);
if(currentDepth<but.parent.numChildren-1){
but.parent.setChildIndex(but, currentDepth+1);
}
}

function clickHandler(event:MouseEvent):void {
if (event.type == MouseEvent.MOUSE_DOWN) {
//if (event.target == girar_btn) {
pulsado(event);
//}
} else if (event.type == MouseEvent.MOUSE_UP) {
mousefuera(event);
}
}

function pulsado(e:MouseEvent):void{

//bringForwardB(girar_btn);
e.target.addEventListener(Event.ENTER_FRAME,onEF);
// cuanto mayor sea el indice_rotacion más lento girará
indice_rotacion = 5;
// en el momento de presionar, almaceno la posición _x del
// puntero y el fotograma actual del clip que quiero rotar
fotograma_inicio = ohm_mc.currentFrame;
posicion_puntero = MovieClip(root).mouseX;
// lanzo un enterFrame que me rota el clip en función del
// movimiento del puntero mientras presiono
//girar_btn.removeEventListener(Event.ENTER_FRAME, onEF);
}


function onEF(e:Event):void {
// desplazamiento x del puntero desde que he apretado
var deslizamientoX = MovieClip(root).mouseX-posicion_puntero;
// este deslizamiento lo paso a fotogramas, es decir
// cuanto más me alejo de la posición x inicial
// más frames tengo que desplazar
var deslizamientoFrames = int(deslizamientoX/indice_rotacion);
var fotogramaDestino = fotograma_inicio-deslizamientoFrames;
// compruebo si el fotograma destino es mayor que el total,
// es decir si tengo que ir al fotograma 70 y tengo 60,
// tengo que empeza desde el inicio e ir al frame 10
if (fotogramaDestino<1) {
fotogramaDestino = ohm_mc.totalFrames+fotogramaDestino;
}
// hacia atrás igual, si tengo que ir al fotograma -5 de 60,
// en realidad voy al 55. Así aseguramos rotar las vueltas que queramos.
if (fotogramaDestino>ohm_mc.totalFrames) {
fotogramaDestino = fotogramaDestino-ohm_mc.totalFrames;
}
// voy al fotograma destino y produce la sensación de rotación.
ohm_mc.gotoAndStop(fotogramaDestino);
}


function mousefuera(e:MouseEvent):void{
// si libero dejo de rotar.
e.target.removeEventListener(Event.ENTER_FRAME, onEF);
bringForward2(ohm_mc);
}

Ojalá quede más claro. Muchas gracias por tu ayuda e interés.

Por Evilgouki

3 de clabLevel



 

chrome
Citar            
MensajeEscrito el 30 Oct 2013 08:13 pm
Hay mucho codigo en ese frame. Quitaste estas dos líneas y ya no te da error?

ohm_mc.addEventListener(MouseEvent.MOUSE_DOWN, clickHandler);
ohm_mc.addEventListener(MouseEvent.MOUSE_UP, clickHandler);

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 30 Oct 2013 10:46 pm
Si quito esas líneas ya no me sale la zapatilla y no hace nada

Por Evilgouki

3 de clabLevel



 

chrome
Citar            
MensajeEscrito el 31 Oct 2013 12:07 pm
Asegurate que tienes en el escenario un MovieClip con nombre de instancia ohm_mc, si igual da el error prueba de mover el código un fotograma mas adelante.

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 04 Nov 2013 02:07 pm
Gracias Jorge!! Moví el AS un fotograma más adelante, y los objetos los puse en en frame 1 y 2, pero en el 1 los puse con alfa y anda perfecto. Muchas gracias

Por Evilgouki

3 de clabLevel



 

chrome

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.