Comunidad de diseño web y desarrollo en internet online

Problema para declarar y asignar un array.

Citar            
MensajeEscrito el 17 Dic 2012 06:36 pm
Estoy haciendo un flash donde tengo varias pelotas que rebotan en el stage y entre si.

Ahora tengo 2 clases una que se llama rebotando y otra pelota, mi documento tiene la clase rebotando, tengo agregado el efecto de rebote ahí y las pelotas se llaman ahí también al stage, en total 8. El problema es que necesito que cuando el cursor este sobre una pelota, esta despliegue un mensaje.

Pero no tengo ni idea de como asignar a cada pelota un nodo del array, ni como declarar la funcion para esto :( .

Este es mi codigo para la pelota

Código ActionScript :

package
{
   import flash.events.Event;
   import flash.display.MovieClip;
   import flash.display.Sprite;
   import flash.events.MouseEvent;
   
   
   public class Ball extends MovieClip
   {
      public var nSpeedX:Number;
      public var nSpeedY:Number;
      
      public var nombres_array:Array = ["It\'s like dropping your toast butter-side up.", "It\'s like finding twenty bucks in your pocket.", "It\'s like finding parking chock-full of time on the meter.", "It\'s like oversleeping, panicking and then realizing it’s only Sunday.", "It\'s like winning a poker hand with a pair of 2’s.", "It\'s like an even number of socks coming out of the dryer.", "It\'s like spreading peanut butter without ripping the bread."];
      
      private var nStageWidth:Number = 420;
      private var nStageHeight:Number = 178;
      
      public function Ball ( NSpeedX:Number, NSpeedY:Number ) : void
      {
         nSpeedX = NSpeedX;
         nSpeedY = NSpeedY;
         
         this.addEventListener ( Event.ENTER_FRAME, onEnterFrameHandler );
         this.addEventListener ( MouseEvent.MOUSE_OVER, detenerya);
         this.addEventListener ( MouseEvent.MOUSE_OUT, seguiya);
         
         //this.addEventListener( MouseEvent.MOUSE_OVER,trazar);
         //this.addEventListener( MouseEvent.MOUSE_OUT,outF);
         
         //for(var i=0;i<8;i++){
         //this["ball"+i].ivar=i;
         //}
      }
      
      
      private function onEnterFrameHandler ( E:Event ) : void
      {
         this.x -= nSpeedX;
         this.y -= nSpeedY;
         
         if ( this.x >= nStageWidth - 10 )
         {
            this.x = nStageWidth - 10;
            nSpeedX *= -1;
         }
         else if ( this.x <= 10 )
         {
            this.x = 10;
            nSpeedX *= -1;
         }
         
         if ( this.y >= nStageHeight - 10 )
         {
            this.y = nStageHeight - 10;
            nSpeedY *= -1;
         }
         else if ( this.y <= 10 )
         {
            this.y = 10;
            nSpeedY *= -1;
         }
         
      } 
      
      private function detenerya ( e : MouseEvent ) : void {
          removeEventListener( Event.ENTER_FRAME, onEnterFrameHandler);      
      }
      
      private function  seguiya ( e : MouseEvent ) : void {
          addEventListener( Event.ENTER_FRAME, onEnterFrameHandler);      
      }

      //function overF(e:MouseEvent):void{
      //tf.text=textA[e.currentTarget.ivar];   // if the compiler complains, cast e.currentTarget as a MovieClip
      //}
      //function outF(e:MouseEvent):void{
      //tf.text="";
      //}
      
      //private function trazar(item:*, index:int, array:Array) : void {
         //trace( index + item );
      //}
      
      //nombres_array.forEach(trazar);

   }
   
}

Por AAlcocer

5 de clabLevel



Genero:Masculino  

Diseñador

chrome
Citar            
MensajeEscrito el 18 Dic 2012 07:05 pm
La clase es una sola bola, pero tiene los mensajes de todos? Recorre el array de mensajes, cuando crees la bola agrega un setter para el mensaje que debe mostrar la instancia, lo seteas luego de crearlo

Código ActionScript :

private var _mensaje:String;

public set mensaje(m:String):void{
   _mensaje = m
}


Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 18 Dic 2012 07:31 pm

solisarg escribió:

La clase es una sola bola, pero tiene los mensajes de todos? Recorre el array de mensajes, cuando crees la bola agrega un setter para el mensaje que debe mostrar la instancia, lo seteas luego de crearlo

Código ActionScript :

private var _mensaje:String;

public set mensaje(m:String):void{
   _mensaje = m
}


Jorge



La clase bola es solo una, esta la duplico para mostrar las 8 pelotas por el stage, pero ese es mi problema que no encuentro como asignar el arra a las que están agregadas por as, no se si es posible saber si tienen un nombre en particular o como hacer esto. Se debe mostrar un mensaje distinto por pelota, pero ya intente y solo me hace la función en una de ella. Por otra parte no me quedo muy clara tu respuesta, si pudieras ampliarla para poder entender.

Gracias

Por AAlcocer

5 de clabLevel



Genero:Masculino  

Diseñador

chrome
Citar            
MensajeEscrito el 18 Dic 2012 08:57 pm
No duplicas, instancias, ese es el sentido de una clase. La idea es así

Código ActionScript :

var nombres_array:Array = ["It\'s like dropping your toast butter-side up.", "It\'s like finding twenty bucks in your pocket.", "It\'s like finding parking chock-full of time on the meter.", "It\'s like oversleeping, panicking and then realizing it’s only Sunday.", "It\'s like winning a poker hand with a pair of 2’s.", "It\'s like an even number of socks coming out of the dryer.", "It\'s like spreading peanut butter without ripping the bread."];
var cantidad:int = nombres_array.length;
for(var i:int = 0; i<cantidad, i++) {
     var bola:Ball = new Ball()
     bola.mensaje = nombres_array[i]
}
//en la clase Ball agrego este metodo
public set mensaje(m:String):void{
   _mensaje = m
}
 private function detenerya ( e : MouseEvent ) : void {
       removeEventListener( Event.ENTER_FRAME, onEnterFrameHandler);      
       muestraMensaje()
  }
  private function muestraMensaje():void{
    trace(_mensaje)
    // y lo que haga falta para mostrarlo
  }


Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 18 Dic 2012 10:22 pm

solisarg escribió:

No duplicas, instancias, ese es el sentido de una clase. La idea es así

Código ActionScript :

var nombres_array:Array = ["It\'s like dropping your toast butter-side up.", "It\'s like finding twenty bucks in your pocket.", "It\'s like finding parking chock-full of time on the meter.", "It\'s like oversleeping, panicking and then realizing it’s only Sunday.", "It\'s like winning a poker hand with a pair of 2’s.", "It\'s like an even number of socks coming out of the dryer.", "It\'s like spreading peanut butter without ripping the bread."];
var cantidad:int = nombres_array.length;
for(var i:int = 0; i<cantidad, i++) {
     var bola:Ball = new Ball()
     bola.mensaje = nombres_array[i]
}
//en la clase Ball agrego este metodo
public set mensaje(m:String):void{
   _mensaje = m
}
 private function detenerya ( e : MouseEvent ) : void {
       removeEventListener( Event.ENTER_FRAME, onEnterFrameHandler);      
       muestraMensaje()
  }
  private function muestraMensaje():void{
    trace(_mensaje)
    // y lo que haga falta para mostrarlo
  }


Jorge


Creo que no me explique correctamente, tengo una clase de documento que se llama BallCollision, en el hago el llamado para la clase Ball y la duplico para poner 8 bolas en el stage. Asi quedo mi codigo anterior:

Código ActionScript :

package
{
   import flash.events.Event;
   import flash.display.MovieClip;
   import flash.display.Sprite;
   import flash.events.MouseEvent;
   
   
   public class Ball extends MovieClip
   {
      public var nSpeedX:Number;
      public var nSpeedY:Number;
      
      
      private var nStageWidth:Number = 420;
      private var nStageHeight:Number = 178;
      
      
      
      public function Ball ( NSpeedX:Number, NSpeedY:Number ) : void
      {
         nSpeedX = NSpeedX;
         nSpeedY = NSpeedY;
         
         this.addEventListener ( Event.ENTER_FRAME, onEnterFrameHandler );
         this.addEventListener ( MouseEvent.MOUSE_OVER, detenerya);
         this.addEventListener ( MouseEvent.MOUSE_OUT, seguiya);
         
         this.addEventListener ( MouseEvent.MOUSE_OVER, mostrar);
         
      }
      
      
      private function onEnterFrameHandler ( E:Event ) : void
      {
         this.x -= nSpeedX;
         this.y -= nSpeedY;
         
         if ( this.x >= nStageWidth - 10 )
         {
            this.x = nStageWidth - 10;
            nSpeedX *= -1;
         }
         else if ( this.x <= 10 )
         {
            this.x = 10;
            nSpeedX *= -1;
         }
         
         if ( this.y >= nStageHeight - 10 )
         {
            this.y = nStageHeight - 10;
            nSpeedY *= -1;
         }
         else if ( this.y <= 10 )
         {
            this.y = 10;
            nSpeedY *= -1;
         }
         
      } 
      
      private function detenerya ( e : MouseEvent ) : void {
          removeEventListener( Event.ENTER_FRAME, onEnterFrameHandler);      
      }
      
      private function  seguiya ( e : MouseEvent ) : void {
          addEventListener( Event.ENTER_FRAME, onEnterFrameHandler);      
      }
      
      /**/

      
/*      private function set mensaje( m:String ) : void {
         _mensaje = m;
      }*/
      
      private function mostrar( e : MouseEvent ) : void {
         
         var nombres_array:Array = ["It\'s like dropping your toast butter-side up.", "It\'s like finding twenty bucks in your pocket.", "It\'s like finding parking chock-full of time on the meter.", "It\'s like oversleeping, panicking and then realizing it’s only Sunday.", "It\'s like winning a poker hand with a pair of 2’s.", "It\'s like an even number of socks coming out of the dryer.", "It\'s like spreading peanut butter without ripping the bread."];
         var cantidad:int = nombres_array.length;   
         
         for(var i:int = 0; i<cantidad; i++){
            
            this.mensaje = nombres_array[i];
         }
            trace(mensaje);
      // y lo que haga falta para mostrarlo
      }
      
   }/* End public class*/
   
}/* End package*/

Por AAlcocer

5 de clabLevel



Genero:Masculino  

Diseñador

chrome
Citar            
MensajeEscrito el 18 Dic 2012 10:24 pm
Ya quedo pero solo me tira puros 0 (ceros) :?

Por AAlcocer

5 de clabLevel



Genero:Masculino  

Diseñador

chrome
Citar            
MensajeEscrito el 19 Dic 2012 02:34 am
Te dije que le agregaras un setter para poner el mensaje en la creación y lo metiste como metodo interno con el loop que siempre llega hasta el último ... me parece que falta conocimiento de base, la programación no es magia.

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 Dic 2012 02:19 pm
Pues esta mas que claro que la programación no es magia, la magia es mas fácil. Y pues si es falta de conocimiento por eso la pregunta.

Al final pude hacer que me deje de dar 0, pero aun no encuentro la forma en que cada que el mouse este en hover, recorra un lugar y muestro un mensaje distinto, esto quedo asi:

Código ActionScript :

package
{
   import flash.events.Event;
   import flash.display.MovieClip;
   import flash.display.Sprite;
   import flash.events.MouseEvent;
   
   
   public class Ball extends MovieClip
   {
      public var nSpeedX:Number;
      public var nSpeedY:Number;
      
      
      private var nStageWidth:Number = 420;
      private var nStageHeight:Number = 178;
      
      
      
      public function Ball ( NSpeedX:Number, NSpeedY:Number ) : void
      {
         nSpeedX = NSpeedX;
         nSpeedY = NSpeedY;
         
         this.addEventListener ( Event.ENTER_FRAME, onEnterFrameHandler );
         this.addEventListener ( MouseEvent.MOUSE_OVER, detenerya);
         this.addEventListener ( MouseEvent.MOUSE_OUT, seguiya);
         
         this.addEventListener ( MouseEvent.MOUSE_OVER, mostrar);
         
      }
      
      
      private function onEnterFrameHandler ( E:Event ) : void
      {
         this.x -= nSpeedX;
         this.y -= nSpeedY;
         
         if ( this.x >= nStageWidth - 10 )
         {
            this.x = nStageWidth - 10;
            nSpeedX *= -1;
         }
         else if ( this.x <= 10 )
         {
            this.x = 10;
            nSpeedX *= -1;
         }
         
         if ( this.y >= nStageHeight - 10 )
         {
            this.y = nStageHeight - 10;
            nSpeedY *= -1;
         }
         else if ( this.y <= 10 )
         {
            this.y = 10;
            nSpeedY *= -1;
         }
         
      } 
      
      private function detenerya ( e : MouseEvent ) : void {
          removeEventListener( Event.ENTER_FRAME, onEnterFrameHandler);      
      }
      
      private function  seguiya ( e : MouseEvent ) : void {
          addEventListener( Event.ENTER_FRAME, onEnterFrameHandler);      
      }
      
      /**/

      
/*      private function set mensaje( m:String ) : void {
         _mensaje = m;
      }*/
      
      private function mostrar( e : MouseEvent ) : void {
         
         var nombres_array:Array = ["It\'s like dropping your toast butter-side up.", "It\'s like finding twenty bucks in your pocket.", "It\'s like finding parking chock-full of time on the meter.", "It\'s like oversleeping, panicking and then realizing it’s only Sunday.", "It\'s like winning a poker hand with a pair of 2’s.", "It\'s like an even number of socks coming out of the dryer.", "It\'s like spreading peanut butter without ripping the bread."];
/*         var mensaje:int = nombres_array.length;   
         var m:String;
         m = String(mensaje);*/
         
         
/*         private function set menaje( m:String ) : void{
            mensaje = m;
         }*/

         for(var i = 0; i<nombres_array; i++){
            
            //mensaje = nombres_array[i];
            //i++;
         }
            trace(nombres_array[i]);
            
      // y lo que haga falta para mostrarlo
      }
      
   }/* End public class*/
   
}/* End package*/
:shock:

Por AAlcocer

5 de clabLevel



Genero:Masculino  

Diseñador

chrome
Citar            
MensajeEscrito el 19 Dic 2012 02:37 pm
Ok, repito entonces

FUERA de la clase, en donde instancias las Ball

Código ActionScript :

var nombres_array:Array = ["It\'s like dropping your toast butter-side up.", "It\'s like finding twenty bucks in your pocket.", "It\'s like finding parking chock-full of time on the meter.", "It\'s like oversleeping, panicking and then realizing it’s only Sunday.", "It\'s like winning a poker hand with a pair of 2’s.", "It\'s like an even number of socks coming out of the dryer.", "It\'s like spreading peanut butter without ripping the bread."];
var cantidad:int = nombres_array.length;
for(var i:int = 0; i<cantidad, i++) {
     var bola:Ball = new Ball()
     bola.mensaje = nombres_array[i]
}


Esta linea instancia una bola

var bola:Ball = new Ball()

Esta linea setea el mensaje en la instancia

bola.mensaje = nombres_array[i]

Lo otro si va dentro de la clase. Vuelve a mi primera respuesta en donde te ponia este code

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 Dic 2012 05:01 pm
Lo intente como dijiste, existen algunos errores debido a mi código, trate de corregirlos , así quedo:

Este es para la clase Ball

Código ActionScript :

package
{
   import flash.events.Event;
   import flash.display.MovieClip;
   import flash.display.Sprite;
   import flash.events.MouseEvent;
   
   
   public class Ball extends MovieClip
   {
      public var nSpeedX:Number;
      public var nSpeedY:Number;
      
      
      private var nStageWidth:Number = 420;
      private var nStageHeight:Number = 178;
      
      public function mensaje( m : String ) : void {
            var mensaje = m;
      }
      
      
      
      public function Ball ( NSpeedX:Number, NSpeedY:Number ) : void
      {
         nSpeedX = NSpeedX;
         nSpeedY = NSpeedY;
         
         this.addEventListener ( Event.ENTER_FRAME, onEnterFrameHandler );
         this.addEventListener ( MouseEvent.MOUSE_OVER, detenerya);
         this.addEventListener ( MouseEvent.MOUSE_OUT, seguiya);
         //this.addEventListener ( MouseEvent.MOUSE_OVER, mostrar);
         
      }
      
      
      private function onEnterFrameHandler ( E:Event ) : void
      {
         this.x -= nSpeedX;
         this.y -= nSpeedY;
         
         if ( this.x >= nStageWidth - 10 )
         {
            this.x = nStageWidth - 10;
            nSpeedX *= -1;
         }
         else if ( this.x <= 10 )
         {
            this.x = 10;
            nSpeedX *= -1;
         }
         
         if ( this.y >= nStageHeight - 10 )
         {
            this.y = nStageHeight - 10;
            nSpeedY *= -1;
         }
         else if ( this.y <= 10 )
         {
            this.y = 10;
            nSpeedY *= -1;
         }
         
      } 
      
      private function detenerya ( e : MouseEvent ) : void {
          removeEventListener( Event.ENTER_FRAME, onEnterFrameHandler);      
          muestraMensaje();
      }
      
      private function  seguiya ( e : MouseEvent ) : void {
          addEventListener( Event.ENTER_FRAME, onEnterFrameHandler);      
      }
      
      private function muestraMensaje():void{
      trace(mensaje);
         // y lo que haga falta para mostrarlo
      }
      
      /**/
      
   }/* End public class*/
   
}/* End package*/


y este es para la otra clase

Código ActionScript :

package
{
   import flash.display.MovieClip;
   import flash.display.Stage;
   import flash.events.Event;
   import flash.events.KeyboardEvent;
   import flash.events.MouseEvent;

   
   public class BallCollision extends MovieClip
   {
      private var mcBallContainer:MovieClip;
      private var nNumBalls:Number = 2;
      
      private var nStageWidth:Number = 420;
      private var nStageHeight:Number = 178;
      
      public function BallCollision ( ) : void
      {
         mcBallContainer = new MovieClip ( ) ;
         mcBallContainer.x = mcBallContainer.y = 0;
         stage.addChild(mcBallContainer);
         
         this.addEventListener ( Event.ENTER_FRAME, enterFrameHandler );
         
         for ( var i = 0; i < nNumBalls; i++ )
         {
            var mcBall:Ball = new Ball ( Math.floor ( ( Math.random() * 12 ) - 4 ), Math.floor ( ( Math.random() * 12 ) - 4 ) );
            mcBall.x = Math.random() * nStageWidth;
            mcBall.y = Math.random() * nStageHeight;
            mcBallContainer.addChild ( mcBall );
         }
         
         var nombres_array:Array = ["It\'s like dropping your toast butter-side up.", "It\'s like finding twenty bucks in your pocket.", "It\'s like finding parking chock-full of time on the meter.", "It\'s like oversleeping, panicking and then realizing it’s only Sunday.", "It\'s like winning a poker hand with a pair of 2’s.", "It\'s like an even number of socks coming out of the dryer.", "It\'s like spreading peanut butter without ripping the bread."];
         var cantidad:int = nombres_array.length;
         
         for ( var f:int = 0; f<cantidad; f++)
         {
             var bola:Ball = new Ball();
             bola.mensaje(nombres_array[f]);
         }

      }
      
      private function enterFrameHandler ( E:Event ) : void
      {
         for ( var i = 0; i < mcBallContainer.numChildren; i++ )
         {
            var mcBall1:* = mcBallContainer.getChildAt( i );
            
            for ( var j = i + 1; j < mcBallContainer.numChildren; j++ )
            {
               var mcBall2:* = mcBallContainer.getChildAt( j );
               
               var nDistX:Number = Math.abs ( mcBall1.x - mcBall2.x );
               var nDistY:Number = Math.abs ( mcBall1.y - mcBall2.y );
               var nDistance:Number = Math.sqrt ( nDistX * nDistX + nDistY * nDistY );
               
               if ( nDistance < 45 )
               {
                  solveBalls ( mcBall1, mcBall2 );
               }
            }
         }
      }
      
      private function solveBalls ( MCBallA:MovieClip, MCBallB:MovieClip ) : void
      {
         var nX1:Number = MCBallA.x;
         var nY1:Number = MCBallA.y;
         var nDistX:Number = MCBallB.x - nX1;
         var nDistY:Number = MCBallB.y - nY1;
         
         var nDistance:Number = Math.sqrt ( nDistX * nDistX + nDistY * nDistY );
         var nRadiusA:Number = MCBallA.width/2;
         var nRadiusB:Number = MCBallB.width/2;
         //var nRadius:Number = 10;
         
         var nNormalX:Number = nDistX/nDistance;
         var nNormalY:Number = nDistY/nDistance;
         
         var nMidpointX:Number = ( nX1 + MCBallB.x )/2;
         var nMidpointY:Number = ( nY1 + MCBallB.y )/2;
         
         MCBallA.x = nMidpointX - nNormalX * nRadiusA;
         MCBallA.y = nMidpointY - nNormalY * nRadiusA;
         MCBallB.x = nMidpointX + nNormalX * nRadiusB;
         MCBallB.y = nMidpointY + nNormalY * nRadiusB;
         
         var nVector:Number = ( ( MCBallA.nSpeedX - MCBallB.nSpeedX ) * nNormalX )+ ( ( MCBallA.nSpeedY - MCBallB.nSpeedY ) * nNormalY );
         var nVelX:Number = nVector * nNormalX;
         var nVelY:Number = nVector * nNormalY;
         
         MCBallA.nSpeedX -= nVelX;
         MCBallA.nSpeedY -= nVelY;
         MCBallB.nSpeedX += nVelX;
         MCBallB.nSpeedY += nVelY;
      }

   }
}

el trace me tira puro:
function Function() {}
function Function() {}
function Function() {}
function Function() {}

cada over sobre las bolas

Por AAlcocer

5 de clabLevel



Genero:Masculino  

Diseñador

chrome
Citar            
MensajeEscrito el 19 Dic 2012 05:06 pm
Por alguna razon si quito de:

Código ActionScript :

 for ( var f:int = 0; f<cantidad; f++)
         {
             var bola:Ball = new Ball();
             bola.mensaje(nombres_array[f]);
         }


var bola:Ball = new Ball() <--- me pide 2 argumentos :/

Por AAlcocer

5 de clabLevel



Genero:Masculino  

Diseñador

chrome
Citar            
MensajeEscrito el 19 Dic 2012 05:10 pm
Ok, copypasteaste un par de clases e intentas meter mano, el código que pusiste no tiene sentido. Para que no parezca prejuicio: estás instanciando las bolas y las agregas con addChild, y en seguida las instancias de nuevo, les seteas el mensaje y nunca las agregas???? ¿Que sentido tiene eso? Obviamente las bolas no tiran nada porque tienen el mensaje vacío, y las otras no se ven. Diria que es muy complejo el script que elegiste

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 Dic 2012 06:32 pm
Entiendo que es complicado, pero no es copy paste, claro esta que me guíe de tutoriales, pero si pudieras ayudarme a resolver este problema. Con eso tambien me ayudarias a comprender mejor el as

Por AAlcocer

5 de clabLevel



Genero:Masculino  

Diseñador

chrome
Citar            
MensajeEscrito el 20 Dic 2012 12:25 pm
Las bolas se crean en un loop anterior

Código ActionScript :

 for ( var i = 0; i < nNumBalls; i++ )
         {
            var mcBall:Ball = new Ball ( Math.floor ( ( Math.random() * 12 ) - 4 ), Math.floor ( ( Math.random() * 12 ) - 4 ) );


Con esos dos argumentos, que si no copypasteaste entonces olvidaste que los habias puesto. Lo que significan lo puedes ver en el constructor de Ball

public function Ball ( NSpeedX:Number, NSpeedY:Number )

Ahora bien, has agregado un segundo loop que recorre las etiquetas, cuanto en realidad deberias haber combinado ambos, es decir declarar el array de etiquetas como propiedad de clase, es decir donde declaras las otras variables al principio de la clase pones las etiquetas

var nombres_array:Array = [.......]

Luego en el loop donde se crean las bolas agregas

mcBall.mensaje(nombres_array[i]);

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 20 Dic 2012 04:09 pm
Si fue un error mio, pero ya había intentando de esta forma, colocando el array en las variables y con esto dentro del loop

mcBall.mensaje(nombres_array[i]);

ahora me sale un error de que _mensaje no esta definido, talvez sea porque estoy setteando mal algo y me queda una duda que pasa con esto:

public var cantidad:int = nombres_array.length;

talvez esa se la razon del error pero no entiendo como repararlo, así quedo lo que hice

Código ActionScript :

package
{
   import flash.display.MovieClip;
   import flash.display.Stage;
   import flash.events.Event;
   import flash.events.KeyboardEvent;
   import flash.events.MouseEvent;

   
   public class BallCollision extends MovieClip
   {
      private var mcBallContainer:MovieClip;
      private var nNumBalls:Number = 2;
      public var nombres_array:Array = ["It\'s like dropping your toast butter-side up.", "It\'s like finding twenty bucks in your pocket.", "It\'s like finding parking chock-full of time on the meter.", "It\'s like oversleeping, panicking and then realizing it’s only Sunday.", "It\'s like winning a poker hand with a pair of 2’s.", "It\'s like an even number of socks coming out of the dryer.", "It\'s like spreading peanut butter without ripping the bread."];
      public var cantidad:int = nombres_array.length;
      
      private var nStageWidth:Number = 420;
      private var nStageHeight:Number = 178;
      



      
      public function BallCollision ( ) : void
      {
         mcBallContainer = new MovieClip ( ) ;
         mcBallContainer.x = mcBallContainer.y = 0;
         stage.addChild(mcBallContainer);
         
         this.addEventListener ( Event.ENTER_FRAME, enterFrameHandler );
         
         
         
         for ( var i = 0; i < nNumBalls; i++ )
         {
            var mcBall:Ball = new Ball ( Math.floor ( ( Math.random() * 12 ) - 4 ), Math.floor ( ( Math.random() * 12 ) - 4 ) );
            mcBall.x = Math.random() * nStageWidth;
            mcBall.y = Math.random() * nStageHeight;
            mcBall.mensaje(nombres_array[i]);
            mcBallContainer.addChild ( mcBall );
         }

      }
      
      private function enterFrameHandler ( E:Event ) : void
      {
         for ( var i = 0; i < mcBallContainer.numChildren; i++ )
         {
            var mcBall1:* = mcBallContainer.getChildAt( i );
            
            for ( var j = i + 1; j < mcBallContainer.numChildren; j++ )
            {
               var mcBall2:* = mcBallContainer.getChildAt( j );
               
               var nDistX:Number = Math.abs ( mcBall1.x - mcBall2.x );
               var nDistY:Number = Math.abs ( mcBall1.y - mcBall2.y );
               var nDistance:Number = Math.sqrt ( nDistX * nDistX + nDistY * nDistY );
               
               if ( nDistance < 45 )
               {
                  solveBalls ( mcBall1, mcBall2 );
               }
            }
         }
      }
      
      private function solveBalls ( MCBallA:MovieClip, MCBallB:MovieClip ) : void
      {
         var nX1:Number = MCBallA.x;
         var nY1:Number = MCBallA.y;
         var nDistX:Number = MCBallB.x - nX1;
         var nDistY:Number = MCBallB.y - nY1;
         
         var nDistance:Number = Math.sqrt ( nDistX * nDistX + nDistY * nDistY );
         var nRadiusA:Number = MCBallA.width/2;
         var nRadiusB:Number = MCBallB.width/2;
         //var nRadius:Number = 10;
         
         var nNormalX:Number = nDistX/nDistance;
         var nNormalY:Number = nDistY/nDistance;
         
         var nMidpointX:Number = ( nX1 + MCBallB.x )/2;
         var nMidpointY:Number = ( nY1 + MCBallB.y )/2;
         
         MCBallA.x = nMidpointX - nNormalX * nRadiusA;
         MCBallA.y = nMidpointY - nNormalY * nRadiusA;
         MCBallB.x = nMidpointX + nNormalX * nRadiusB;
         MCBallB.y = nMidpointY + nNormalY * nRadiusB;
         
         var nVector:Number = ( ( MCBallA.nSpeedX - MCBallB.nSpeedX ) * nNormalX )+ ( ( MCBallA.nSpeedY - MCBallB.nSpeedY ) * nNormalY );
         var nVelX:Number = nVector * nNormalX;
         var nVelY:Number = nVector * nNormalY;
         
         MCBallA.nSpeedX -= nVelX;
         MCBallA.nSpeedY -= nVelY;
         MCBallB.nSpeedX += nVelX;
         MCBallB.nSpeedY += nVelY;
      }
   }
}


el otro:

Código ActionScript :

package
{
   import flash.events.Event;
   import flash.display.MovieClip;
   import flash.display.Sprite;
   import flash.events.MouseEvent;
   
   
   public class Ball extends MovieClip
   {
      public var nSpeedX:Number;
      public var nSpeedY:Number;
      
      private var nStageWidth:Number = 420;
      private var nStageHeight:Number = 178;
      
      public function Ball ( NSpeedX:Number, NSpeedY:Number ) : void
      {
         nSpeedX = NSpeedX;
         nSpeedY = NSpeedY;
         
         this.addEventListener ( Event.ENTER_FRAME, onEnterFrameHandler );
         this.addEventListener ( MouseEvent.MOUSE_OVER, detenerya);
         this.addEventListener ( MouseEvent.MOUSE_OUT, seguiya);
      }
      
      
      private function onEnterFrameHandler ( E:Event ) : void
      {
         this.x -= nSpeedX;
         this.y -= nSpeedY;
         
         if ( this.x >= nStageWidth - 10 )
         {
            this.x = nStageWidth - 10;
            nSpeedX *= -1;
         }
         else if ( this.x <= 10 )
         {
            this.x = 10;
            nSpeedX *= -1;
         }
         
         if ( this.y >= nStageHeight - 10 )
         {
            this.y = nStageHeight - 10;
            nSpeedY *= -1;
         }
         else if ( this.y <= 10 )
         {
            this.y = 10;
            nSpeedY *= -1;
         }
         
      } 
      
      public function set mensaje( m : String ) : void {
      _mensaje = m;
      }
      
      public function muestraMensaje():void{
      trace(_mensaje);
      // y lo que haga falta para mostrarlo
      }
   
      
      public function detenerya ( e : MouseEvent ) : void {
         removeEventListener( Event.ENTER_FRAME, onEnterFrameHandler);      
         muestraMensaje();
      }
      
      private function seguiya ( e : MouseEvent ) : void {
          addEventListener( Event.ENTER_FRAME, onEnterFrameHandler);      
      }
      
   }/* End public class*/
   
}/* End package*/

Por AAlcocer

5 de clabLevel



Genero:Masculino  

Diseñador

chrome
Citar            
MensajeEscrito el 20 Dic 2012 05:51 pm
Nop, es un setter, sería

mcBall.mensaje = nombres_array[i];

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox

 

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