Причина, по которой вы получили эту ошибку, заключается в том, что cherry
не является свойством или методом объекта cPie
, это имя экземпляра для дочернего экранного объекта вашего контейнера экранных объектов cPie
. Для доступа к экранному объекту cherry
необходимо использовать унаследованные cPie
методы объекта DisplayObjectContainer
, а именно метод getChildByName()
. К счастью, это уже объясняется в другом ответе frankhermes, поэтому я объясню другой (и, возможно, лучший) подход к доступу к дочернему экранному объекту в следующем примере:
CherryPie.as:
package display
{
import flash.display.MovieClip;
public class CherryPie extends MovieClip
{
private var _cherry:MovieClip;
public function get cherry():MovieClip
{
return _cherry;
}// end function
public function CherryPie()
{
_cherry = cherryMC;
}// end function
}// end class
}// end package
Main.as:
package
{
import flash.display.Sprite;
import flash.events.Event;
public class Main extends Sprite
{
public function Main():void
{
init();
}// end function
private function init():void
{
var cherryPie:CherryPie = new CherryPie();
cherryPie.x = 100;
cherryPie.y = 100;
cherryPie.cherry.gotoAndStop(2);
addChild(cherryPie);
}// end function
}// end class
}// end package
Создав базовый класс для своего cherryPie_mc
мувиклипа, вы можете создать свойство с именем cherry
и назначить ему дочерний экранный объект cherry
при запуске класса. Таким образом, вы можете напрямую получить доступ к дочернему экранному объекту cherry
, например:
cherryPie.cherry.gotoAndStop(2);
вместо:
cherryPie.getChildByName("cherryMC").gotoAndStop(2);
Вы можете установить класс CherryPie
в качестве базового класса cherryPie_mc
фрагмента ролика следующим образом:
ПРИМЕЧАНИЕ. «Имя» в свойствах символа должно быть «cherryPie_mc»
Также для тех, кто интересуется, почему я не установил cherry
в качестве публичной собственности
public var cherry:MovieClip;
и вместо этого использовал метод получения для доступа к частной собственности
private var _cherry:MovieClip;
public function get cherry():MovieClip
{
return _cherry;
}// end function
должен был сделать объект cherry доступным только для чтения, что было сделано путем пропуска метода setter. Причина, по которой я сделал это только для чтения, заключалась в том, чтобы избежать чего-то вроде следующего:
cherryPie.cherry = new FakeCherry();