2014-02-20 78 views
0

我对Flash很陌生,并且第一次发现了laggs问题...自从laggs启动时,它会抛出一个空引用错误,我认为它们属于一起。垃圾收集器闪存

我试过使用垃圾收集器,将对象设置为null并删除它们...到目前为止没有任何工作。请帮助。

      //Handler for Collisions 

          if (active_ball_array[array_counter] != null) 
          { 

          //Collision:Magma 

          if  (active_ball.hitTestObject(magma)) 
          { 
           max_active_balls --; 
           active_ball.parent.removeChild(active_ball); 
           active_ball = null; 
           trace("Ball removed: "+max_active_balls); 
          } 

          //Collision:Vertical 
          if (active_ball.hitTestObject(roof) || active_ball.hitTestObject(p1) || active_ball.hitTestObject(p2) || active_ball.hitTestObject(p3) || active_ball.hitTestObject(p4)) 
          { 
           if (animation_array[array_counter] == "crack2") 
           { 
            max_active_balls --; 
            active_ball.parent.removeChild(active_ball); 
            active_ball = null; 
            trace("Ball removed: "+max_active_balls); 
           } 
           else if(animation_array[array_counter] == "crack1") 
            {animation_array[array_counter]="crack2";} 
           else 
            {animation_array[array_counter]="crack1";} 

           mouse_target_hit_array[array_counter] = true; 
           ball_flightY_array[array_counter] *= -1; 
          } 

          //Collision:Horizontal 
          if (active_ball.hitTestObject(wall_L) || active_ball.hitTestObject(wall_R)) 
          { 
           if (animation_array[array_counter] == "crack2") 
           { 
            max_active_balls --; 
            active_ball.parent.removeChild(active_ball); 
            active_ball = null; 
            trace("Ball removed: "+max_active_balls); 
           } 
           else if(animation_array[array_counter] == "crack1") 
           {animation_array[array_counter]="crack2";} 
           else 
           {animation_array[array_counter]="crack1";} 

           mouse_target_hit_array[array_counter] = true; 
           ball_flightX_array[array_counter] *= -1; 
          } 
         }//END active_ball Collision Handler 

         ball_animation(animation_array[array_counter]); 
         firm_distance_array[array_counter] = true; 
         array_counter ++; 
         System.gc(); 

回答

0

Flash中的垃圾收集是自动的。你不能真的“使用”它。清除未使用的对象是一个好主意,如果该程序真的与他们完成。你在三个单独的'if'语句中有'active_ball' - 当程序稍后将尝试引用它时,是否将其置于其中一个内部?这可能是空引用错误告诉你的。

请将laggs'翻译成英文。你的意思是减速吗?还请显示引发错误的代码行。

+0

Laggs是英文我想o.O也许它的“玩家俚语”我不知道。对不起,但你说得对。那么我已经找到了答案。问题是,每次碰撞发生的碰撞都是1000次,我解决了这个问题。但要知道垃圾收集器是一个默认的帮助也很多,谢谢。 – Fuby