Comunidad de diseño web y desarrollo en internet online

Problema al llamar la clase

Citar            
MensajeEscrito el 22 Jul 2009 10:16 am
Hola, soy relativamente nuevo en esto del AS3 entonces quiero preguntar unas cositas

Estoy haciendo el juego del pong del tutorial que hay en Cristalab, pero con variantes, retocandolo con menús, botones, videos etc..
El archivo .as ya está listo, la clase se llama "pong". Pues mi error aparece cuando apreto un botón y quiero llamar a esa clase. Este es el codigo del fla:

Código ActionScript :

nivel1.addEventListener(MouseEvent.CLICK, clickListener7); 

function clickListener7(e:MouseEvent) 
{ 
    nivel1.removeEventListener(MouseEvent.CLICK, clickListener7); 
   var juego:pong = new pong(0x333300,0xFF0000,0x0000FF,0xFFFFFF,0xAAAAAA,2,0xFFFFFF,0xFFFFFF,"Nivel 1","Arial",30,0);
   addChild(juego);
}


Pero me da el siguiente error:

AS3 escribió:

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


Esta es la función constructora del archivo pong.as

Código ActionScript :

public class pong extends MovieClip
   {
public function pong(bgColor:uint,
                         playerColor:uint,
                         enemyColor:uintF,
                         ballColor:uint,
                         middleLineColor:uint,
                         ballSpeed:int,
                         scoreColor:uint,
                         msgColor:uint,
                         msg:String,
                         scoreFont:String,
                         scoreSize:int,
                         dificultad:Number):void
         {


Espero que me ayuden, llevo tiempo buscando el error por internet pero no acabo de encontrar una solución
Gracias ^^

Por --Deci--

8 de clabLevel



 

firefox
Citar            
MensajeEscrito el 22 Jul 2009 10:39 am
Posiblemente el constructor tenga referencias a elementos que no existen (solo pusiste los parámetros)

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 22 Jul 2009 10:47 am
Os dejo todo el pong.as

Código ActionScript :

// ------------------------------------------------------------------------------------------------------------
//---------------------------- PAQUETES -----------------------------------------------------------
//-----------------------------------------------------------------------------------------------------------
package
{
   import flash.display.*;
   import flash.ui.Mouse;
   import flash.events.TimerEvent;
   import flash.events.MouseEvent;
   import flash.events.Event;
   import flash.text.TextField;
   import flash.text.TextFieldType;
   import flash.text.TextFormat;
   import flash.text.TextFieldAutoSize;
   import flash.utils.Timer;
   import fl.transitions.Tween;
   import fl.transitions.easing.*;
   import flash.display.MovieClip;
   
   
// ------------------------------------------------------------------------------------------------------------
//---------------------------- FUNCION CONSTRUCTORA -----------------------------------------------------------
//-------------------------------------------------------------------------------------------------------------
   public class pong extends MovieClip
   {
/*         public function pong(bgColor:uint = 0x000000,
                         playerColor:uint = 0xFFFFFF,
                         enemyColor:uint = 0xFFFFFF,
                         ballColor:uint = 0xFFFFFF,
                         middleLineColor:uint = 0xFFFFFF,
                         ballSpeed:int = 2,
                         scoreColor:uint = 0xFFFFFF,
                         msgColor:uint = 0xFFFFFF,
                         msg:String = "Click here",
                         scoreFont:String = "Arial",
                         scoreSize:int = 30,
                         dificultad:Number = 0):void
*/
         
         public function pong(bgColor:uint,
                         playerColor:uint,
                         enemyColor:uintF,
                         ballColor:uint,
                         middleLineColor:uint,
                         ballSpeed:int,
                         scoreColor:uint,
                         msgColor:uint,
                         msg:String,
                         scoreFont:String,
                         scoreSize:int,
                         dificultad:Number):void
         {
// ------------------------------------------------------------------------------------------------------------
//---------------------------- CONSTANTES -----------------------------------------------------------
//-------------------------------------------------------------------------------------------------------------            
            
            stage.showDefaultContextMenu = false;
            const STAGE_WIDTH:int = stage.stageWidth;
            const STAGE_HEIGHT:int = stage.stageHeight;
            
            var enemyVelocidad:Number = 4;
            
// ------------------------------------------------------------------------------------------------------------
//---------------------------- CREAR FONDO -----------------------------------------------------------
//-------------------------------------------------------------------------------------------------------------                  
            var bg:MovieClip = new MovieClip();
            bg.graphics.beginFill(bgColor);
            bg.graphics.drawRect(0, 0, STAGE_WIDTH, STAGE_HEIGHT);
            bg.graphics.endFill();
            addChild(bg);
// ------------------------------------------------------------------------------------------------------------
//---------------------------- CREAR JUGADOR Y ENEMY -----------------------------------------------------------
//-------------------------------------------------------------------------------------------------------------         
            var player:MovieClip = new MovieClip();
            
            player.graphics.beginFill(playerColor);
            player.graphics.drawRect(0, 0, 8, 50);
            player.graphics.endFill();
            
            player.x = player.width;
            player.y = (STAGE_HEIGHT / 2) - (player.height / 2);
            
            addChild(player);
            var enemy:MovieClip = new MovieClip();
            
            enemy.graphics.beginFill(enemyColor);
            enemy.graphics.drawRect(0, 0, 8, 50);
            enemy.graphics.endFill();
            
            enemy.x = STAGE_WIDTH - enemy.width * 2;
            enemy.y = (STAGE_HEIGHT / 2) - (enemy.height / 2);

            addChild(enemy);
         
// ------------------------------------------------------------------------------------------------------------
//---------------------------- CREAR PELOTA -----------------------------------------------------------
//-------------------------------------------------------------------------------------------------------------
            var ball:MovieClip = new MovieClip();
            
            ball.graphics.beginFill(ballColor);
            ball.graphics.drawCircle(0, 0, 5);
            ball.graphics.endFill();
            
            ball.x = STAGE_WIDTH / 2 - ball.width / 2;
            ball.y = STAGE_HEIGHT / 2 - ball.height / 2;

            addChild(ball);
// ------------------------------------------------------------------------------------------------------------
//---------------------------- LINEA CENTRO STAGE -----------------------------------------------------------
//-------------------------------------------------------------------------------------------------------------                  
            var middleLine:MovieClip = new MovieClip();
            
            middleLine.graphics.lineStyle(2, middleLineColor);
            middleLine.graphics.lineTo(0, STAGE_HEIGHT);
            
            middleLine.x = STAGE_WIDTH / 2;
            middleLine.y = 0;

            addChild(middleLine);
            
// ------------------------------------------------------------------------------------------------------------
//---------------------------- MOVIMIENTO JUGADOR -----------------------------------------------------------
//-------------------------------------------------------------------------------------------------------------
   
            function playerMovement(event:TimerEvent):void
               {
                  player.y = mouseY - player.height / 2;
                  
                  if(player.y >= STAGE_HEIGHT - player.height)
                  {
                     player.y = STAGE_HEIGHT - player.height;
                  }
                  
                  if(player.y <= 0)
                  {
                     player.y = 0;
                  }
               }
               
            addEventListener(Event.ENTER_FRAME, enemyAI);
            function enemyAI(Event)
            {
               
               if(ball.x > STAGE_WIDTH/10*6 && ball.x < STAGE_WIDTH/10*8)
               {
                   var MyTween:Tween = new Tween(enemy, "y", Regular.easeOut, enemy.y, ball.y, 1/enemyVelocidad, true);
               }
            }
            
         
// ------------------------------------------------------------------------------------------------------------
//---------------------------- PELOTA -----------------------------------------------------------
//-------------------------------------------------------------------------------------------------------------
 
            ball.speed = ballSpeed;
            ball.dir = 0;
            player.score = 0;
            enemy.score = 0;
            
            function ballMovement(event:TimerEvent):void
            {
               if(playin)
               {
                  ball.x -= ball.speed;
                  ball.y -= ball.dir;
               }
               
               if(ball.x <= player.x)
               {
                  enemy.score++;
                  restart();
               }
               if(ball.x >= enemy.x)
               {
                  player.score++;
                  restart();
               }
               
               if(ball.y > (STAGE_HEIGHT - ball.height / 2))
               {
                  ball.dir *= -1;
               }
               
               if(ball.y < ball.height / 2)
               {
                  ball.dir *= -1;
               }
            }
         
            function checkHit(event:TimerEvent):void
            {
               if(ball.hitTestObject(player) ||
               ball.hitTestObject(enemy))
               {
                  ball.speed *= -1;
                  ball.dir = (Math.random() * 1) + (Math.random() * -1);
               }
            
            }
         
// ------------------------------------------------------------------------------------------------------------
//---------------------------- MARCADOR -----------------------------------------------------------
//-------------------------------------------------------------------------------------------------------------
            var scoreFormat:TextFormat = new TextFormat();
            
            scoreFormat.color = scoreColor;
            scoreFormat.font = scoreFont;
            scoreFormat.size = scoreSize;
            
            var playerScore:TextField = new TextField();
            
            playerScore.autoSize = TextFieldAutoSize.CENTER;
            playerScore.x = STAGE_WIDTH / 4;
            playerScore.y = STAGE_HEIGHT / 10;
            playerScore.selectable = false;
            playerScore.defaultTextFormat = scoreFormat;
            playerScore.type = TextFieldType.DYNAMIC;
            
            addChild(playerScore);
         
            var enemyScore:TextField = new TextField();
            
            enemyScore.autoSize = TextFieldAutoSize.CENTER;
            enemyScore.x = (STAGE_WIDTH) - (STAGE_WIDTH / 4)
            enemyScore.y = STAGE_HEIGHT / 10;
            enemyScore.selectable = false;
            enemyScore.defaultTextFormat = scoreFormat;
            enemyScore.type = TextFieldType.DYNAMIC;
            
            addChild(enemyScore);
            
            function scoreHandler(event:TimerEvent)
            {
               playerScore.text = player.score;
               enemyScore.text = enemy.score;
            }
// ------------------------------------------------------------------------------------------------------------
//---------------------------- TEXTO DE BIENVENIDA -----------------------------------------------------------
//-------------------------------------------------------------------------------------------------------------         
            var startMsg:TextField = new TextField();
            
            var startFormat:TextFormat = new TextFormat();
            
            startFormat.color = msgColor;
            startFormat.bold = true;
            
            startMsg.x = 0;
            startMsg.y = (STAGE_HEIGHT) - (STAGE_HEIGHT / 12);
            startMsg.selectable = false;
            startMsg.type = TextFieldType.DYNAMIC;
            startMsg.defaultTextFormat = startFormat;
            startMsg.text = msg;
            
            addChild(startMsg);

            var playin:Boolean = false;
            function startHandler(event:MouseEvent):void
            {
               Mouse.hide();
               playin = true;
               timer.start();
               startMsg.text = "";
            }
// ------------------------------------------------------------------------------------------------------------
//---------------------------- FUNCION RESTART -----------------------------------------------------------
//-------------------------------------------------------------------------------------------------------------               
            function restart():void
            {
               ball.x = STAGE_WIDTH / 2 - ball.width / 2;
               ball.y = STAGE_HEIGHT / 2 - ball.height / 2;
               enemy.x = STAGE_WIDTH - enemy.width * 2;
               enemy.y = (STAGE_HEIGHT / 2) - (enemy.height / 2);
               player.x = player.width;
               player.y = (STAGE_HEIGHT / 2) - (player.height / 2);
               playin = false;
               ball.speed = ballSpeed;
               ball.dir = 0;
            }      
            
// ------------------------------------------------------------------------------------------------------------
//---------------------------- TIMERS Y LISTENERS -----------------------------------------------------------
//-------------------------------------------------------------------------------------------------------------            
            stage.addEventListener(MouseEvent.CLICK, startHandler);
            
            var timer:Timer = new Timer(1, 0);
            
            timer.addEventListener(TimerEvent.TIMER, playerMovement);
            timer.addEventListener(TimerEvent.TIMER, enemyAI);
            timer.addEventListener(TimerEvent.TIMER, ballMovement);
            timer.addEventListener(TimerEvent.TIMER, checkHit);
            timer.addEventListener(TimerEvent.TIMER, scoreHandler);

         }
   }
}

Por --Deci--

8 de clabLevel



 

firefox
Citar            
MensajeEscrito el 22 Jul 2009 10:53 am
Al no estar en el displaylist al momento de crearse, puede que la referencia a stage falle.
De hecho releyendo el tutorial lo dice

La Clase debe ser llamada por medio del cuadro de texto Document Class en el Panel de Propiedades de Flash, ya que el objeto stage no permite el uso de import en una Clase de este tipo.
Para modificar los Parámetros lo puedes hacer directamente desde la Clase.


Usa valores fijos

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 22 Jul 2009 11:19 am
Si queremos que la clase "pong" no sea la "Calse de documento" de nuesrta película Flash, tendríamos que cambiarla un poco, de modo que la Clase constructora simplemente añada el listener ADD_TO_STAGE, sería la función la que iniciaría nuestro juego

Código ActionScript :

public class pong extends MovieClip { 
   //aquí declaro las variables que le vamos a pasar al constructor
   var playerColor:uint;
   var enemyColor:uintF; 
   var ballColor:uint; 
     .....
   var dificultad:Number;
//en la función "constructora" únicamente igualo las variables y añado el listener
//he cambiado el nombre de las variables del argumento de la función añadiendole un "_"

   public function pong(_bgColor:uint,_playerColor:uint,_enemyColor:uintF,_ballColor:uint,_middleLineColor:uint, 
                              _ballSpeed:int,_scoreColor:uint,_msgColor:uint,_msg:String,_scoreFont:String,_scoreSize:int, 
                             _dificultad:Number):void 
   { 
              //igualamos las variables
              bgColor=_bgColor;
              playerColor=_playerColor;
              enemyColor=_enemyColor;
              .....
              dificultad=_dificultad

              //Le digo que, cuando se añada al Stage ejecute la función "init"
              addEventListener(Event.ADDED_TO_STAGE, init);
   }
   private function init(e:Event = null):void 
   {
              //remuevo el listener
              removeEventListener(Event.ADDED_TO_STAGE, init)

              //Y pongo TODO el código de la función constructora
             stage.showDefaultContextMenu = false; 
             const STAGE_WIDTH:int = stage.stageWidth; 
             const STAGE_HEIGHT:int = stage.stageHeight;
               .........
   }
   //aquí el resto de las funciones que no son la "constructora"
   ...........
}

Por Eliseo2

710 de clabLevel



 

firefox
Citar            
MensajeEscrito el 23 Jul 2009 10:55 am
1ero, Gracias por contestar ^^

Jorge, no puedo llamarla des del Document Class porque el juego tendrs diferentes niveles y diferentes valores (dificultad, colores etc...)


Eliseoi, intenté con lo que me dijiste pero ahora me manda una avalancha de errores
La imagen es grande y no quiero que ocupe mucho espacio
http://img43.imageshack.us/img43/434/errorst.jpg

Asi tengo por ahora el codigo

Código ActionScript :

package {
   import flash.display.*;
   import flash.ui.Mouse;
   import flash.events.TimerEvent;
   import flash.events.MouseEvent;
   import flash.events.Event;
   import flash.text.TextField;
   import flash.text.TextFieldType;
   import flash.text.TextFormat;
   import flash.text.TextFieldAutoSize;
   import flash.utils.Timer;
   import fl.transitions.Tween;
   import fl.transitions.easing.*;
   import flash.display.MovieClip;


   // ------------------------------------------------------------------------------------------------------------
   //---------------------------- FUNCION CONSTRUCTORA -----------------------------------------------------------
   //-------------------------------------------------------------------------------------------------------------
   public class pongg extends MovieClip {
         var bgColor:uint;
         var playerColor:uint;
         var enemyColor:uint;
         var ballColor:uint;
         var middleLineColor:uint;
         var ballSpeed:int;
         var scoreColor:uint;
         var msgColor:uint;
         var msg:String;
         var scoreFont:String;
         var scoreSize:int;
         var dificultad:Number;


      public function pongg(_bgColor:uint,
                        _playerColor:uint,
                       _enemyColor:uint,
                         _ballColor:uint,
                       _middleLineColor:uint,  
                                                _ballSpeed:int,
                       _scoreColor:uint,
                       _msgColor:uint,
                        _msg:String,
                         _scoreFont:String,
                         _scoreSize:int,  
                                               _dificultad:Number):void 
      
      {
            bgColor=_bgColor;
            playerColor=_playerColor; 
                 enemyColor=_enemyColor;
            ballColor=_ballColor;
            middleLineColor=_middleLineColor;
            ballSpeed=_ballSpeed;
            scoreColor=_scoreColor;
            msgColor=_msgColor;
            msg=_msg;
            scoreFont=_scoreFont;
            scoreSize=_scoreSize;
               dificultad=_dificultad
         
         
         addEventListener(Event.ADDED_TO_STAGE, init);

      
      }

         private function init(e:Event = null):void {
            
            removeEventListener(Event.ADDED_TO_STAGE, init);
            stage.showDefaultContextMenu=false;
            const STAGE_WIDTH:int=stage.stageWidth;
            const STAGE_HEIGHT:int=stage.stageHeight;

            var enemyVelocidad:Number=4;

            var bg:MovieClip = new MovieClip();
            bg.graphics.beginFill(bgColor);
            bg.graphics.drawRect(0, 0, STAGE_WIDTH, STAGE_HEIGHT);
            bg.graphics.endFill();
            addChild(bg);

            var player:MovieClip = new MovieClip();

            player.graphics.beginFill(playerColor);
            player.graphics.drawRect(0, 0, 8, 50);
            player.graphics.endFill();

            player.x=player.width;
            player.y = (STAGE_HEIGHT / 2) - (player.height / 2);

            addChild(player);
            var enemy:MovieClip = new MovieClip();

            enemy.graphics.beginFill(enemyColor);
            enemy.graphics.drawRect(0, 0, 8, 50);
            enemy.graphics.endFill();

            enemy.x=STAGE_WIDTH-enemy.width*2;
            enemy.y = (STAGE_HEIGHT / 2) - (enemy.height / 2);

            addChild(enemy);

            var ball:MovieClip = new MovieClip();

            ball.graphics.beginFill(ballColor);
            ball.graphics.drawCircle(0, 0, 5);
            ball.graphics.endFill();

            ball.x=STAGE_WIDTH/2-ball.width/2;
            ball.y=STAGE_HEIGHT/2-ball.height/2;

            addChild(ball);

            var middleLine:MovieClip = new MovieClip();

            middleLine.graphics.lineStyle(2, middleLineColor);
            middleLine.graphics.lineTo(0, STAGE_HEIGHT);

            middleLine.x=STAGE_WIDTH/2;
            middleLine.y=0;

            addChild(middleLine);

            addEventListener(Event.ENTER_FRAME, enemyAI);

            ball.speed=ballSpeed;
            ball.dir=0;
            player.score=0;
            enemy.score=0;

            var scoreFormat:TextFormat = new TextFormat();

            scoreFormat.color=scoreColor;
            scoreFormat.font=scoreFont;
            scoreFormat.size=scoreSize;

            var playerScore:TextField = new TextField();

            playerScore.autoSize=TextFieldAutoSize.CENTER;
            playerScore.x=STAGE_WIDTH/4;
            playerScore.y=STAGE_HEIGHT/10;
            playerScore.selectable=false;
            playerScore.defaultTextFormat=scoreFormat;
            playerScore.type=TextFieldType.DYNAMIC;

            addChild(playerScore);

            var enemyScore:TextField = new TextField();

            enemyScore.autoSize=TextFieldAutoSize.CENTER;
            enemyScore.x = (STAGE_WIDTH) - (STAGE_WIDTH / 4);
            enemyScore.y=STAGE_HEIGHT/10;
            enemyScore.selectable=false;
            enemyScore.defaultTextFormat=scoreFormat;
            enemyScore.type=TextFieldType.DYNAMIC;

            addChild(enemyScore);

            var startMsg:TextField = new TextField();

            var startFormat:TextFormat = new TextFormat();

            startFormat.color=msgColor;
            startFormat.bold=true;

            startMsg.x=0;
            startMsg.y = (STAGE_HEIGHT) - (STAGE_HEIGHT / 12);
            startMsg.selectable=false;
            startMsg.type=TextFieldType.DYNAMIC;
            startMsg.defaultTextFormat=startFormat;
            startMsg.text=msg;

            addChild(startMsg);

            var playin:Boolean=false;

            stage.addEventListener(MouseEvent.CLICK, startHandler);

            var timer:Timer=new Timer(1,0);

            timer.addEventListener(TimerEvent.TIMER, playerMovement);
            timer.addEventListener(TimerEvent.TIMER, enemyAI);
            timer.addEventListener(TimerEvent.TIMER, ballMovement);
            timer.addEventListener(TimerEvent.TIMER, checkHit);
            timer.addEventListener(TimerEvent.TIMER, scoreHandler);
         }
         
         
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////// FUNCIONES ///////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
         function playerMovement(event:TimerEvent):void {
            player.y=mouseY-player.height/2;

            if (player.y>=STAGE_HEIGHT-player.height) {
               player.y=STAGE_HEIGHT-player.height;
            }

            if (player.y<=0) {
               player.y=0;
            }
         }


         function enemyAI(Event) {

            if (ball.x>STAGE_WIDTH/10*6&&ball.x<STAGE_WIDTH/10*8) {
               var MyTween:Tween=new Tween(enemy,"y",Regular.easeOut,enemy.y,ball.y,1/enemyVelocidad,true);
            }
         }


         // ------------------------------------------------------------------------------------------------------------
         //---------------------------- PELOTA -----------------------------------------------------------
         //-------------------------------------------------------------------------------------------------------------


         function ballMovement(event:TimerEvent):void {
            if (playin) {
               ball.x-=ball.speed;
               ball.y-=ball.dir;
            }

            if (ball.x<=player.x) {
               enemy.score++;
               restart();
            }
            if (ball.x>=enemy.x) {
               player.score++;
               restart();
            }

            if (ball.y > (STAGE_HEIGHT - ball.height / 2)) {
               ball.dir*=-1;
            }

            if (ball.y<ball.height/2) {
               ball.dir*=-1;
            }
         }

         function checkHit(event:TimerEvent):void {
            if (ball.hitTestObject(player) ||
            ball.hitTestObject(enemy)) {
               ball.speed*=-1;
               ball.dir = (Math.random() * 1) + (Math.random() * -1);
            }

         }

         // ------------------------------------------------------------------------------------------------------------
         //---------------------------- MARCADOR -----------------------------------------------------------
         //-------------------------------------------------------------------------------------------------------------


         function scoreHandler(event:TimerEvent) {
            playerScore.text=player.score;
            enemyScore.text=enemy.score;
         }
         // ------------------------------------------------------------------------------------------------------------
         //---------------------------- TEXTO DE BIENVENIDA -----------------------------------------------------------
         //-------------------------------------------------------------------------------------------------------------
         function startHandler(event:MouseEvent):void {
            Mouse.hide();
            playin=true;
            timer.start();
            startMsg.text="";
         }
         // ------------------------------------------------------------------------------------------------------------
         //---------------------------- FUNCION RESTART -----------------------------------------------------------
         //-------------------------------------------------------------------------------------------------------------
         function restart():void {
            ball.x=STAGE_WIDTH/2-ball.width/2;
            ball.y=STAGE_HEIGHT/2-ball.height/2;
            enemy.x=STAGE_WIDTH-enemy.width*2;
            enemy.y = (STAGE_HEIGHT / 2) - (enemy.height / 2);
            player.x=player.width;
            player.y = (STAGE_HEIGHT / 2) - (player.height / 2);
            playin=false;
            ball.speed=ballSpeed;
            ball.dir=0;
         }

   }
}


Y este es el codigo fla, no lo he tocado

Código ActionScript :

nivel1.addEventListener(MouseEvent.CLICK, clickListener7); 

function clickListener7(e:MouseEvent) 
{ 
    nivel1.removeEventListener(MouseEvent.CLICK, clickListener7); 
   trace("hola");
   var juego:pongg = new pongg(0x333300,0xFF0000,0x0000FF,0xFFFFFF,0xAAAAAA,2,0xFFFFFF,0xFFFFFF,"Nivel 1","Arial",30,0);
   addChild(juego);
}

Por --Deci--

8 de clabLevel



 

firefox
Citar            
MensajeEscrito el 23 Jul 2009 11:20 am
TODAS las variables definidas en la función "init" han de estar declaradas FUERA de la función. Vamos el problema es que, al estar definidas DENTRO de la función "init" sólo tienen valor dentro de dicha función, lo que hace que sean variable inaccesibles dentro de ellas. con lo cual quedaría

Código ActionScript :

public class pongg extends MovieClip { 
         var bgColor:uint; 
         .....
         var dificultad:Number; 
         //aquí añadimos las variables que se ponen en la función init -y las quitamos de dicha función
         var enemyVelocidad:Number=4; 
         var bg:MovieClip = new MovieClip(); 
    var player:MovieClip = new MovieClip(); 
         var enemy:MovieClip = new MovieClip(); 
         var ball:MovieClip = new MovieClip(); 
         var scoreFormat:TextFormat = new TextFormat(); 
         var playerScore:TextField = new TextField(); 
         var enemyScore:TextField = new TextField(); 
         var startMsg:TextField = new TextField(); 
         var startFormat:TextFormat = new TextFormat(); 
         var playin:Boolean=false; 
         var timer:Timer=new Timer(1,0); 

         //además definimos como variables
         var STAGE_WIDTH:int=0; 
         var STAGE_HEIGHT:int=0;

         //en la función "init" escribiremos
         private function init(e:Event = null):void { 
             
            removeEventListener(Event.ADDED_TO_STAGE, init); 

            //le damos valor a las variables STAGE_WIDTH y STAGE_HEIGHT
            STAGE_WIDTH=stage.stageWidth; 
            STAGE_HEIGHT=stage.stageHeight; 

            stage.showDefaultContextMenu=false; 
            .....
            ¡¡OJO!! que los var que había aquí dentro los tenemos que quitar
        }
       ....
}

debería funcionar

Por Eliseo2

710 de clabLevel



 

firefox
Citar            
MensajeEscrito el 24 Jul 2009 09:55 am
Muchas gracias ^^

Ya se carga la clase, aunque fallan algunas cosas, como el contador, el player y tal pero me ha servido de mucha ayuda todo esto ^^

A partir de ahora me toca a mi solucionar los errores que quedan :D

Saludos

Por --Deci--

8 de clabLevel



 

firefox
Citar            
MensajeEscrito el 27 Jul 2009 10:46 am
Lo siento por revivir el tema pero tengo un problema que no se como solucionar y sigo sin encontrar en google y para no hacer un nuevo tema escribo aquí.

El juego funciona bien, el problema es: Quiero quitar la classe cuando el enemigo o el player marquen 15 goles.

No se muy bien como hacerlo, lo he probado con muchas cosas pero no lo tengo nada claro.

Gracias ^^

Por --Deci--

8 de clabLevel



 

firefox
Citar            
MensajeEscrito el 27 Jul 2009 11:35 am
En principio, si lo hacemos desde la propia Clase podemos escribir

Código ActionScript :

parent.removeChild(this)

Vamos, usamos parent porque "removeChild" precisa del Mc (que lo contiene)

Aunque eso sólo lo quitaría "visualmente". Es decir, el "pong" seguiría "corriendo".
Lo que se suele hacer es crear una "función destructora", en la que quitamos todos los Listeners añadidos primero y, luego lo hacemos desaparecer de la displayList

Código ActionScript :

function deletePong(){
   //el ENTER_FRAME
   removeEventListener(Event.ENTER_FRAME, enemyAI);    
   //Los listeners de "timer"
   timer.removeEventListener(TimerEvent.TIMER, playerMovement); 
   timer.removeEventListener(TimerEvent.TIMER, enemyAI); 
   timer.removeEventListener(TimerEvent.TIMER, ballMovement); 
   timer.removeEventListener(TimerEvent.TIMER, checkHit); 
   timer.removeEventListener(TimerEvent.TIMER, scoreHandler); 
   ....
   //si hay alguno más también
   ...
   //Finalmente lo quitamos de la displayList
   parent.removeChild(this)
}

Así, sólo tendrás que llamar a la función "DeletePong()" cuando corresponda.

NOTA:No sé si también habrá que igualar a null las variables de la Clase también o, antes del removeChild(this) hacer un removeChild de los MCs creados

Por Eliseo2

710 de clabLevel



 

firefox

 

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