Comunidad de diseño web y desarrollo en internet online

atascado con TypeError: Error #1009

Citar            
MensajeEscrito el 19 Ago 2009 11:48 am
Hola a todos, soy practicamente nuevo en este mundillo del as3, antes solo habia programado en Basic, Cobol y C, gracias a este foro he ido hasta ahora trampeando poco a poco, ya que es lo mejor que he visto para resolver dudas y aprender. Pero hoy me he quedado atascado con este error

TypeError: Error #1009: No se puede acceder a una propiedad o a un método de una referencia a un objeto nulo.
at EfectoProfundidad2_fla::MainTimeline/frame1()

Estoy intentando hace un efecto de profundidad de la web http://www.sargentoweb.com/as3/?doc=16

Lo he puesto tal y como me pone, total que ahora despues de unas modificaciones lo tengo asi:

Código ActionScript :

import fl.transitions.Tween;
import fl.transitions.easing.*;
import flash.display.MovieClip;
import flash.display.Sprite;
import flash.events.MouseEvent;
import flash.display.StageDisplayState;

var Flor:MovieClip;
var M1:MovieClip;
var M2:MovieClip;
var M3:MovieClip;
var M4:MovieClip;
var M5:MovieClip;

var profundidad:Number;

Flor.origenX=Flor.x;
Flor.origenY=Flor.y;
M1.origenX=M1.x;
M1.origenY=M1.y;
M2.origenX=M2.x;
M2.origenY=M2.y;
M3.origenX=M3.x;
M3.origenY=M3.y;
M4.origenX=M4.x;
M4.origenY=M4.y;
M5.origenX=M5.x;
M5.origenY=M5.y;

//VALORES DE PROFUNDIDAD
Flor.profundidad=10;
M1.profundidad=24;
M2.profundidad=54;
M3.profundidad=145;
M4.profundidad=90;
M5.profundidad=35;

var arrObjetos:Array = new Array();
arrObjetos.push({name:"Flor", profundidad:"10"});
arrObjetos.push({name:"M1", profundidad:"24"});
arrObjetos.push({name:"M2", profundidad:"54"});

arrObjetos.sortOn("profundidad", Array.NUMERIC);
for (var i:int = 0; i < arrObjetos.length; ++i) {
   arrObjetos[i].addEventListener(Event.ENTER_FRAME.fmover);
   addChild(arrObjetos [ i ] );
   //trace(poets[i].name, poets[i].born); 
}
/* output: 
Wang 701 
Dante 1265 
Blake 1757 
cummings 1894 
Angelou 1928 
*/

//CREAMOS UN ARRAY CON LOS OBJETOS QUE VAMOS A ORDENAR
//var arrObjetos:Array=new Array(Flor,M1,M2,M3,M4,M5);
//REORDENAMOS EL ARRAY, TOMANDO "PROFUNDIDAD" COMO PARAMETRO DEL ORDEN
//arrObjetos.sortOn( "profundidad", Array.NUMERIC );
//ITERAMOS ENTRE EL ARRAY REORDENADO
//for (var i:int = 0; i < arrObjetos.length; i++) {
//arrObjetos[i].addEventListener(Event.ENTER_FRAME.fmover);
//AGREGAMOS LOS OBJETOS POR SU ORDEN DE PROFUNIDAD
//addChild(arrObjetos [ i ] );
//}

var ratonX:Number;
var ratonY:Number;
var destX:Number;
var destY:Number;

function fmover(event:Event):void {
   //OBTENEMOS LA POSICION EN X ( -1 <= x <= 1 )
   ratonX = ((stage.stageWidth / 2) - stage.mouseX) / (stage.stageWidth / 2);
   ratonY = ((stage.stageHeight / 2) - stage.mouseY) / (stage.stageHeight / 2);
   //OBTENEMOS EL DESTINO X FINAL DEL OBJETO
   destX = event.target.origenX + (ratonX * event.target.profundidad);
   //EVALUAMOS LA DIFERENCIA ACTUAL Y AUMENTAMOS UNA FRACCION
   event.target.x += (destX - event.target.x)/8;
   //OBTENEMOS EL DESTINO Y FINAL DEL OBJETO
   destY = event.target.origenY + (ratonY * event.target.profundidad);
   //EVALUAMOS LA DIFERENCIA ACTUAL Y AUMENTAMOS UNA FRACCION
   event.target.y += (destY - event.target.y)/8;
   //AJUSTAMOS LA POSICION DEL OBJETO
   event.target.x = event.target.origenX + (ratonX + event.target.profundidad);
   event.target.y = event.target.origenY + (ratonY + event.target.profundidad);

}


A ver si alguien me puede echar un cable y si es de Barna le invito a unas Birras...

Saludos

Por kodama

99 de clabLevel

1 tutorial

Genero:Masculino  

Diseñador Web Freelance

safari
Citar            
MensajeEscrito el 19 Ago 2009 01:44 pm
Usualmente eso quiere decir: hay algo que no está definido ... pero no es de gran utilidad. Lo que sospecho es que el error lo da por el objeto stage .... cambia stage por valores fijos para comprobarlo

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 19 Ago 2009 03:45 pm
gracias por tu respuesta, pero sigue sin funcionar, puliendo, me da el error en el primer array de todos.

Por kodama

99 de clabLevel

1 tutorial

Genero:Masculino  

Diseñador Web Freelance

safari
Citar            
MensajeEscrito el 19 Ago 2009 05:29 pm
Hola,
yo cambiaría alguna cosilla en el código:

1.
En el EventListener pon una coma, no un punto: addEventListener(Event.ENTER_FRAME, fmover);

2.
Al crear los movieclip, tienes que crear instancias de los clips de la biblioteca que quieras usar (por ejemplo, si tienes en la biblioteca clips llamados Symbol1, Symbol2, ...)
var M1:MovieClip = new Symbol1();
var M2:MovieClip = new Symbol2();
...
A no ser tengas ya incluidos los clips en el escenario, en cuyo caso no te hace falta poner las líneas: var M1:MovieClip ... Sino que basta con que les des un nombre a las instancias.

3. Al hacer:
M1.profundidad=24;
M2.profundidad=54;
...
ya estás asignando una propiedad profundidad a los movieclip, luego al hacer los push en el array basta con pasar los movieclip en sí, porque ellos ya tienen esa propiedad (Nota: los nombres de los clips sin comillas):
arrObjetos.push(Flor);
arrObjetos.push(M1);
arrObjetos.push(M2);

Espero que con esto te funcione

Por isidoro

Claber

498 de clabLevel

2 tutoriales

Genero:Masculino  

firefox
Citar            
MensajeEscrito el 19 Ago 2009 06:56 pm
No soy de Barna, pero de vez en cuando paso por ahí, así que no apuestes unas birras :)
Despiezo el código. Tienes

Código ActionScript :

var arrObjetos:Array = new Array(); 
arrObjetos.push({name:"Flor", profundidad:"10"}); 
arrObjetos.push({name:"M1", profundidad:"24"}); 
arrObjetos.push({name:"M2", profundidad:"54"});  
arrObjetos.sortOn("profundidad", Array.NUMERIC); 
for (var i:int = 0; i < arrObjetos.length; ++i) {    
   arrObjetos[i].addEventListener(Event.ENTER_FRAME.fmover);    
   addChild(arrObjetos [ i ] );    
} 

No puede funcionar. A un "objeto" no le puede añadir un listener Event.EnterFrame, Y si lo haces, la función no creo que tenga un "target". Supongo que lo que quieres hacer es

Código ActionScript :

var arrObjetos:Array = new Array(); 
//en los objetos asignamos a la variable "mc" un MovieClip de las Clases "Flor", "M1" y "M2"
//por eso creamos el nuevo objeto con new [nombre de Clase]

arrObjetos.push({mc:new Flor(),name:"Flor", profundidad:"10"}); 
arrObjetos.push({mc:new M1(),name:"M1", profundidad:"24"}); 
arrObjetos.push({mc:new M2(),name:"M2", profundidad:"54"});  
arrObjetos.sortOn("profundidad", Array.NUMERIC); 
//si sólo tuviéramos un MC de la Clase "Flor" escribiríamos algo como
//var mc=new Flor()
//addChild(mc)
for (var i:int = 0; i < arrObjetos.length; ++i) {    
   //a lo que añadimos el listener es a "mc"
   arrObjetos[i].mc.addEventListener(Event.ENTER_FRAME.fmover);    
   //y lo que añadimos a la DisplyList es "mc"
   addChild(arrObjetos [ i ].mc );    
} 


Por cierto, tal y como dice Isidoro, las "profundidades" cambian en AS3. En AS3, lo último que se añade con un addChild es lo que tiene mayor "depth". La "depth" tiene valores desde 0 al último valor de lo que añades (No puedes hacer como en AS.2 añadir un MC a una depth de 1000 o hacer un swapDepth(mimc,1000), p.e.) puedes cambiar la "depth" con setChidIndex, pero no le puedes asignar un valor cualquiera

Por Eliseo2

710 de clabLevel



 

msie8
Citar            
MensajeEscrito el 20 Ago 2009 10:29 am
Gracias a los dos, aprendiendo un poco de uno y otro poco de otro, lo he solucionado. Asi da gusto....

Lo dicho... las birras esperan

Saludos

Por kodama

99 de clabLevel

1 tutorial

Genero:Masculino  

Diseñador Web Freelance

safari
Citar            
MensajeEscrito el 10 Nov 2012 06:07 pm
necesito ayuda es que cuando creo un boton me sale esto i se me bloquea lo demas

TypeError: Error #1009: No se puede acceder a una propiedad o a un método de una referencia a un objeto nulo.
at index_fla::fabulas_41/frame1()[index_fla.fabulas_41::frame1:3]
at flash.display::MovieClip/gotoAndStop()
at index_fla::fabulas_41/fl_ClickToGoToAndStopAtFrame_vf()[index_fla.fabulas_41::frame1:100]

Por angie vargas

1 de clabLevel



 

chrome

 

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