2010-12-10 3 views
0

Быстрый вопрос. Я все утро был в Google, но он либо не был, либо написан таким образом, который не регистрируется. Я склонен поверить в последнее, так как кажется, что это должно быть что-то совершенно тривиальное для меня.Как ссылаться на экземпляр класса из другого экземпляра класса в ActionScript 3.0?

Я сделал небольшой Flash-файл с использованием AS 3.0, и это первый раз, когда я действительно смог придерживаться способа ООП делать что-то, а не взламывать смесь вещей с временной шкалы, чтобы обойти все работает в классах.

Поэтому я хотел бы сохранить его таким образом, но одна вещь ускользает от меня: я не могу вызвать метод экземпляра другого класса (чем тот, с которым я звоню), не прибегая к «DocumentClass (корень) .instanceName.method «.

Intuition говорит мне, что должен быть лучший способ сделать это (например, без необходимости ссылаться на класс документа каждый раз, когда я вызываю функцию другого экземпляра класса, и НЕОБХОДИМО использовать слово «корень» - это просто кажется настолько Flash 5 мне

кто-нибудь есть лучший способ сделать это, что они могут поделиться

Спасибо заранее SS

редактировать:.?! Вот некоторые соответствующий код: Основной класс:

package myApp { 

    import flash.display.*; 
    import flash.events.*; 

    public class Main extends flash.display.MovieClip { 

     public var background; 

     public var control; 

     public function Main() { 

      //load the background 
      this.background = new Background(); 
      this.addChild(background); 

      //load the control 
      this.control = new Control; 
      this.addChild(control); 
     } 
    } 
} 

Фоновый: класс

package myApp { 

    import flash.display.*; 
    import flash.events.*; 

    public class Background extends flash.display.MovieClip { 

     public function Background() { 
      this.x = 0; 
      this.y = 0; 
     } 

     public function doSomething() { 
      //do something here 
     } 

    } 
} 

управления:

package myApp { 

    import flash.display.*; 
    import flash.events.*; 

    public class Control extends flash.display.MovieClip { 

     private var section01; 
     private var section02; 
     private var section03; 

     public function Control() { 

      //some constructor code here 

     } 

     public function doSomethingCaller() { 
      MyApp(root).background.doSomething(); <--- HERE 
     } 
    } 
} 

ответ

1

Вы можете попробовать следующий подход:

package 
{ 
    import com.A; 
    import com.B; 
    import flash.display.MovieClip; 

    public class Main extends MovieClip 
    { 
     private var _a:A; 
     private var _b:B; 

     public function get a():A 
     { 
      return _a; 

     }// end function 

     public function Main():void 
     { 
      init(); 

     }// end function 

     private function init():void 
     { 
      _a = new A(); 
      _b = new B(this); 

     }// end function 

    }// end class 

}// end package 

в своем классе документ "Main", классы «А »и« В ». Частные свойства «_a» и «_b» объявляются в классе «Main» для классов «A» и «B». Далее есть метод getter, называемый «a», который возвращает «_a». Далее существует частный метод под названием «init()», который вы вызываете из конструктора класса «Main». В методе «init()» создаются экземпляры «_a» и «_b», однако для «_b» ссылка на «Main» анализируется с использованием ключевого слова «this».

package com 
{ 
    import flash.display.MovieClip; 

    public class A extends MovieClip 
    { 
     public function A():void {}// end function 

     public function traceClassName():void 
     { 
      trace("Class name: A"); 

     }// end function 

    }// end class 

}// end package 

В классе есть публичный метод называется «traceClassName()», которая прослеживает строку «A»: когда вызывается «имя класса А».

package com 
{ 
    public class B 
    { 
     private var _main; 

     public function B(p_main):void 
     { 
      _main = p_main; 
      _main.a.traceClassName(); 

     }// end function 

    }// end class 

}// end package 

В классе «B» у вас есть частная собственность под названием «_main». В конструкторе класса «В» у вас есть параметр для ссылки на основной класс, который нужно разбор, когда экземпляр класса «В» создается. Свойству «_main» затем присваивается ссылка на «Основной» класс. Теперь вы можете получить доступ к экземпляру «A» через ссылку класса «Main» из класса «B».

Существует много подходов, это просто один из самых простых способов, хотя я думаю, что есть лучшие. Вы должны представить исходный код для своего флеш-приложения/фильма, чтобы я и все остальные могли лучше понять, что вам подойдет.

Я надеюсь, что это помогло :)

+0

Извините, но это просто пошло прямо над моей головой.Например, я не понимаю, почему вы импортируете дополнительные классы в свой основной класс, и это заставляет меня думать, может быть, я делаю что-то неправильно. Позвольте мне опубликовать код выше, и, возможно, вы увидите, о чем я говорю. – StormShadow 2010-12-10 08:42:29