Comunidad de diseño web y desarrollo en internet online

problemas con variable

Citar            
MensajeEscrito el 31 Oct 2008 11:09 am
Hola,
tengo este codigo:

Código :

var cantidad:int=100;
stage.addEventListener(Event.ENTER_FRAME,crearMalos);
stage.addEventListener(KeyboardEvent.KEY_DOWN, teclaPulsada);
stage.addEventListener(KeyboardEvent.KEY_UP, teclaLevantada);
stage.addEventListener(Event.ENTER_FRAME, comprueba);

function teclaPulsada(event:KeyboardEvent):void{
   if(event.keyCode==Keyboard.RIGHT){ prota.x+=10; prota.play() }
   if(event.keyCode==Keyboard.LEFT){ prota.x-=10; prota.play() }
   if(event.keyCode== Keyboard.SPACE){ 
   var bala:Bala=new Bala;
   bala.x=prota.x;
   bala.y=prota.y;
   addChild(bala);
   }
}
function teclaLevantada(event:KeyboardEvent):void{
      if(event.keyCode==Keyboard.RIGHT){ prota.x+=10; prota.play() }
   if(event.keyCode==Keyboard.LEFT){ prota.x-=10; prota.play() }
}

function comprueba(event:Event):void{
   if(malo.hitTestObject(prota)){
      trace("Bala a tocado a prota");
      
   }
}

function crearMalos(event:Event){
   if(cantidad<1){
   var malo:Malo=new Malo;
   malo.x=Math.random()*450;
   addChild(malo);
   cantidad=100;
   }else{
      cantidad--;
   }
}

al ejecutarlo me pone este error:

Código :

1120: Acceso a una propiedad malo no definida.

es en el hitTestObject y creo que es porque la variable se crea en otra funcion
como puedo arreglarlo? he probardo a poner fuera: var malo:Malo= new Malo; fuera pero tambien da fallo
a ver si podeis ayudarme
un saludo y gracias

Por elgordo

8 de clabLevel



 

firefox
Citar            
MensajeEscrito el 31 Oct 2008 11:36 am
Considera usar una clase en vez de una colección de funciones. A poco que complejices el juego te encontrarás con muchos de estos problemas porque la lógica misma de AS3 te lleva a una estructura OOP
Por ahora puedes zafar haciendo esto

var malo:Malo=new Malo;
malo.name = "malo"

Luego en el hitTest

if(getChildByName("malo").hitTestObject(prota))

Si da error posiblemente tengas que hacer un cast del tipo

if(MovieClip(getChildByName("malo")).hitTestObject(prota))

Igual en un juego la preformance tiene que ser óptima, y hacer un lookup para un hitTest no es lo mas recomendable. Otra opción sería crear el malo fuera de la función, para que el ámbito de la variable fuera el timeline mismo

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 31 Oct 2008 11:57 am
hay varios errores más en el código.
1.-No podemos crear dos addEventListener sobre el mismo objeto y el mismo evento. Vamos tienes

Código ActionScript :

stage.addEventListener(Event.ENTER_FRAME,crearMalos);
....
stage.addEventListener(Event.ENTER_FRAME, comprueba);

En tu lugar simplemente llama a la función crearMalos

Código ActionScript :

crearMalos();
....
stage.addEventListener(Event.ENTER_FRAME, comprueba);


2.-Para crear un nuevo objeto se usa new, pero

Código :

var malo:Malo=new Malo(); //<--esos parámetros


3.-Si quieres hacer una comprobación con un hitTest, no puedes escribir

Código ActionScript :

function comprueba(event:Event):void{
   if(malo.hitTestObject(prota)){
      trace("Bala a tocado a prota");
   }
}

"malo" NO vale absolutamente nada, malo es una variable local que sólo tiene sentido dentro de la función crearMalos. Eso es debido a que has escrito

var malo:Malo=new Malo() //<--ese "var"

Supongo que tendrás que crear un array de malos y comprobarlos todos en el hitTest

Código ActionScript :

//al principio de tu código
arrayMalos=new Array()
//en tu función crearMalos
function crearMalos(event:Event){
   if(cantidad<1){
   var malo:Malo=new Malo();
   malo.x=Math.random()*450;
   arrayMalos.push(addChild(malo);) //<--metemos el malo en nuestro array
   cantidad=100;
   }else{
      cantidad--;
   }
}

Así, en tu función "comprueba" te recorres el arrayMalos en un bucle

Por Eliseo2

710 de clabLevel



 

firefox

 

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