4 Replies Latest reply: Sep 10, 2011 7:10 AM by kglad RSS

    TypeError: Error #1010: A term is undefined and has no properties.      at main/onenterFrame()

    smitchell94 Community Member

      Well as the title says, flash is screaming at me "TypeError: Error #1010: A term is undefined and has no properties.

      at main/onenterFrame()"

       

      But I dont know why im getting this error. This is the first game i have tried to make without following a tutorial... Not going to bad so far. It still tests, but once I kill about 10 enemies flash crashes! But everytime i shoot a enemy I get hit error.

       

      This is my main class

      package 
      {
           import flash.display.MovieClip;
           import flash.events.Event;
           import flash.events.MouseEvent;
           import flash.events.TimerEvent;
           import flash.utils.Timer;
      
           public class main extends MovieClip
           {
                private var enemySpawnTimer:Timer = new Timer(1000,8);
                private var _bullets:Array;
                private var _enemies:Array;
                private var _damage:Number;
      
                public function main()
                {
      
                     _bullets = new Array();
                     _bullets = [];
                     _enemies = new Array();
                     _enemies = [];
      
                     player.stop();
                     enemySpawnTimer.addEventListener(TimerEvent.TIMER , onTimeStart);
                     stage.addEventListener("bulletCreated", onBulletCreated);
                     addEventListener(Event.ENTER_FRAME, onenterFrame);
                }
                private function onBulletCreated(event:Event)
                {
                     _bullets.push(MovieClip(event.target));
                }
                private function onTimeStart(event:TimerEvent):void
                {
                     var newEnemy:Enemy = new Enemy();
                     addChild(newEnemy);
                     newEnemy.x = Math.ceil(Math.random() * stage.stageWidth);
                     newEnemy.y = Math.ceil(Math.random() * stage.stageHeight);
                     _enemies.push(newEnemy);
                }
                public function onenterFrame(event:Event):void
                {
                     enemySpawnTimer.start();
                     for (var j:int = 0; j < _bullets.length; j++)
                     {
                          for (var i:int = 0; i < _enemies.length; i++)
                          {
                               if (player.hitTestObject(_enemies[i]))
                               {
                                    trace("hit");
                                    health.scaleX -=  2;
                                    i--;
                               }
      
                               if (_bullets[j].hitTestObject(_enemies[i]))
                               {
                                    _enemies[i].sub.health.scaleX -=  .1;
                                    removeChild(_bullets[j]);
                                    _bullets.splice(j,1);
                                    j--;
                               }
                               if (_enemies[i].sub.health.scaleX <= 0)
                               {
                                    removeChild(_enemies[i]);
                                    _enemies.splice(i,1);
                                    i--;
                               }
                          }
                     }
      
      
      
      
                     if (player.hitTestObject(weapon))
                     {
                          player.gotoAndStop(2);
                          weapon.isArmed = true;
                          removeChild(weapon);
                     }
                }
      
                public function checkCollisionWithPlayer(wall:MovieClip)
                {
                     Collision.block(player, wall);
                }
      
           }
      }
      

       

      If you have any suggestions for optimizing my code please let me know, it will be much appreciated.

        • 1. Re: TypeError: Error #1010: A term is undefined and has no properties.      at main/onenterFrame()
          wonder.blunder

          I have not gone through your entire code, but I did notice a declaration which just doesn't seem right. Try this and see what you come up with:

           

          This is your code:

           

           

           public class main extends MovieClip
               {
                    private var enemySpawnTimer:Timer = new Timer(1000,8);
                    private var _bullets:Array;
                    private var _enemies:Array;
                    private var _damage:Number;
          
                    public function main()
                    {
          
                         _bullets = new Array();
                         _bullets = [];
                         _enemies = new Array();
                         _enemies = [];
          
                         player.stop();
                         enemySpawnTimer.addEventListener(TimerEvent.TIMER , onTimeStart);
                         stage.addEventListener("bulletCreated", onBulletCreated);
                         addEventListener(Event.ENTER_FRAME, onenterFrame);
                    }

           


          Your timer object(enemySpawnTimer) should be initialized within the constructor. You have declared it and initialized at the same time. So when the construction is initialized, it is not creating the timer object:

           

          This is how it should be:

           

           

           public class main extends MovieClip
               {
                    private var enemySpawnTimer:Timer;
                    private var _bullets:Array;
                    private var _enemies:Array;
                    private var _damage:Number;
          
                    public function main()
                    {
                         enemySpawnTimer =  = new Timer(1000,8);
                         _bullets = new Array();
                         _bullets = [];
                         _enemies = new Array();
                         _enemies = [];
          
                         player.stop();
                         enemySpawnTimer.addEventListener(TimerEvent.TIMER , onTimeStart);
                         stage.addEventListener("bulletCreated", onBulletCreated);
                         addEventListener(Event.ENTER_FRAME, onenterFrame);
                    }

          Give it a try, see how you make out.

           

          Thanks.

          • 2. Re: TypeError: Error #1010: A term is undefined and has no properties.      at main/onenterFrame()
            kglad MVP

            "health" and "weapon" look suspicious but click file/publish settings/flash and tick "permit debugging".  retest.

             

            the problematic line of code will be mentioned in the error message allowing you to pinpoint your error.

            • 3. Re: TypeError: Error #1010: A term is undefined and has no properties.      at main/onenterFrame()
              smitchell94 Community Member

              says its on line 55, but I cannot see anything wrong with it.

               

              this is line 55 - if (_bullets[j].hitTestObject(_enemies[i]))

               

              and all together from 55 and below:

               

              if (_bullets[j].hitTestObject(_enemies[i]))

              {

              _enemies[i].sub.health.scaleX -=  .1;

              removeChild(_bullets[j]);

              _bullets.splice(j,1);

              j--;

              }

              if (_enemies[i].sub.health.scaleX <= 0)

              {

              removeChild(_enemies[i]);

              _enemies.splice(i,1);

              i--;

              }

              }

              }

               

               

               

               

              if (player.hitTestObject(weapon))

              {

              player.gotoAndStop(2);

              weapon.isArmed = true;

              removeChild(weapon);

              }

              }

               

              public function checkCollisionWithPlayer(wall:MovieClip)

              {

              Collision.block(player, wall);

              }

               

              }

              }

              • 4. Re: TypeError: Error #1010: A term is undefined and has no properties.      at main/onenterFrame()
                kglad MVP

                both for-loops are problematic if elements are spliced from the corresponding arrays during the loops.   also, never change a for-loop variable in the loop body.  you're going to cause all sorts of problems.

                 

                you should use the trace() function to see what you're doing if you want a better understanding of the problems you were causing.

                 

                to fix your for-loops, use:

                 

                 for (var j:int =_bullets.length-1;j>=0; j--)
                               {
                                    for (var i:int =_enemies.length-1;i>=0; i--)
                                    {
                                         if (player.hitTestObject(_enemies[i]))
                                         {
                                              trace("hit");
                                              health.scaleX -=  2;
                                         }
                
                                         if (_bullets[j].hitTestObject(_enemies[i]))
                                         {
                                              _enemies[i].sub.health.scaleX -=  .1;
                                              removeChild(_bullets[j]);
                                              _bullets.splice(j,1);
                                         }
                                         if (_enemies[i].sub.health.scaleX <= 0)
                                         {
                                              removeChild(_enemies[i]);
                                              _enemies.splice(i,1);
                                         }
                                    }
                               }