2014-02-20 82 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