2016-02-23 2 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 со скоростью 30 кадров в секунду, вы действительно говорите Flash, чтобы делать 150 циклов с интервалом каждые 5 секунд (т. Е. Вы хотите, чтобы это приложение вскоре вышло из строя на вашем компьютере?). Просто оставьте enterframe самостоятельно expet для анимированного кода. Просто создайте новую нормальную функцию addDots(): void' и добавьте свои точки с помощью цикла for (loop while). Ваш 'ctY ++' кажется, что он должен быть вне оператора ** else **. Используйте вложенные For-Loops (для X и Y). Вот как это делается на языке C, но не с циклами While. –

+0

Вы были ** уже ** ** [сказали использовать вложенный for-loop] (http://stackoverflow.com/a/35547100/2057709) **, просто игнорируя рабочий совет? Этот средний код с двумя циклами 'for' - это то, что вы должны делать в обычной функции (событие без ввода). Предполагается, что базовый объект должен быть и зачем нажимать type ': Object' в тип': MovieClip'. –

+0

@ VC.Однако мне очень жаль беспокоить вас. Просто я новичок в этом, поэтому я еще не все понял. Я очень ценю, что вы заглядываете в мой другой вопрос и помогаете мне с этим. Я теперь поставил его под вложенным циклом. Я просто понял, что могу использовать 'var base: Object = MovieClip (root);' затем использовать базовый объект для обращения к основному файлу. Я хотел сделать это, потому что я хотел протестировать столкновение с экземпляром символа на сцене. Извините еще раз и спасибо за вашу помощь. – InfiniteParadox

ответ

1

FIRST вар точки: 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"); 
     }    
    } 

Попробуйте это!

Смежные вопросы