2016-02-23 45 views
0

請原諒我,如果這是一個愚蠢的問題,我真的需要知道解決方案。所以在這裏我有一個程序可以在每個設定的距離上產生粒子。我的程序由一個稱爲supportForce的文檔類和一個名爲TheDot的粒子對象類組成。 在TheDot對象類,我有以下代碼 -錯誤#1009-只有當代碼存在於主類

package 
    { 

     import flash.display.MovieClip; 
     import flash.events.Event; 
     public class TheDot extends MovieClip 
     { 
      var base:Object = MovieClip(root); 
      public function TheDot() 
      { 
       this.addEventListener(Event.ENTER_FRAME, eFrame); 
      } 
      private function eFrame(event:Event):void 
      { 
       if (base.currentFrame == 1){ 
        trace ("G"); 
       } 
      } 
     } 

    } 

此代碼的工作完美(輸出G),直到我添加以下代碼插入到文檔類,suportForce,一個ENTER_FRAME事件 -

var ctX:int = 0,ctY:int = 0,done:Boolean = false; 
while (done == false) 
      { 
       var dots:TheDot = new TheDot ; 
       dots.alpha = 0; 
       dots.x += (25 * ctX); 
       dots.y += (25 * ctY); 
       ctX++; 
       if (ctX == 22 && ctY == 20) 
       { 
        done = true; 
        break; 
       } 
       else if (ctX == 22) 
       { 
        ctX = 0; 
        ctY++; 
       } 
       stage.addChild(dots); 
      } 

因此,現在有一個錯誤#1009:無法訪問TheDot/eFrame()處的空對象引用的屬性或方法。我已經在正確的位置聲明瞭所有變量,並且還聲明瞭函數。提前致謝。我有鏈接到我的驅動器中的.fla和.as文件,如果有必要,請使用它。 https://drive.google.com/folderview?id=0B8QnUfRAn9lKLUVqRjNSRHNpRkU&usp=sharing

+0

你意識到'enterFrame'是在SWF刷新其顯示緩衝區時完成的嗎?如果你將SWF設置爲30fps,那麼你真的只是告訴Flash每5秒鐘做150次while循環(即:你希望這個應用很快就會讓你的電腦崩潰,不是嗎?)。對於動畫代碼,只需將enterframe單獨留給excpet即可。只需創建一個新的普通函數addDots():void',並用for循環(而不是while循環)添加點。你的'ctY ++'好像應該在** else **語句之外。使用嵌套For循環(用於X和Y)。這就是用C語言完成的,而不是使用While循環。 –

+0

**你已經** ** [告訴使用嵌套for循環](http://stackoverflow.com/a/35547100/2057709)**,只是忽略工作建議?具有兩個for循環的中間代碼是您在正常函數(非enterframe事件)中必須執行的操作。基本對象應該是什麼,以及爲什麼將類型':Object'推入類型':MovieClip'。 –

+0

@ VC.One我真的很抱歉讓你煩惱。只是我對這個比較陌生,這就是爲什麼我還沒有完全理解一切。我真的很感謝你看着我的另一個問題,並幫助我解決這個問題。我現在把它放在一個嵌套的循環中。我只知道我可以使用'var base:Object = MovieClip(root);'然後使用Base對象來引用主文件。我想這樣做是因爲我想測試與舞臺上的符號實例的碰撞。再次抱歉,感謝您的幫助。 – InfiniteParadox

回答

1

FIRST VAR點:TheDot =新TheDot(階段);

public class TheDot extends MovieClip 
{ 
    var base:Object; 
    public function TheDot(stageRef:Stage) 
    { 
     base = stageRef; 
     this.addEventListener(Event.ADDED_TO_STAGE, init); 
    } 

    public function init(e:Event) { 
     this.removeEventListener(Event.ADDED_TO_STAGE, init); 
     this.addEventListener(Event.ENTER_FRAME, eFrame); 
    } 

    private function eFrame(event:Event):void 
    { 
     if (base.currentFrame == 1){ 
      trace ("G"); 
     }    
    } 

試試這個!