AS3 Доступ к переменным родительского класса от дочернего - PullRequest
2 голосов
/ 12 апреля 2010

я пытаюсь присвоить родительскую переменную от дочернего родительского

//Parent
public class Main extends Sprite
    {   
    public var selectedSquare:Sprite;

    public function Main()
        {
        //inits and adds new Square child class to display list
        }
...

-------

//Child
public function dragSquare(evt:MouseEvent):void
    {
    Sprite(parent).selectedSquare = this; //evil doesn't work!
    parent.addChild(this);
    this.startDrag();
    }

Я получаю эту ошибку, но я преобразую родителя из displayObjectContainer в Sprite, поэтому я понятия не имею, почему он не работает.

1119: доступ возможно неопределен свойство selectedSquare через ссылка со статическим типом flash.display:. Sprite

Ответы [ 2 ]

4 голосов
/ 12 апреля 2010

Вы должны разыгрывать родительский объект как основного, а не как спрайт, поскольку у спрайта не будет никаких ссылок на «selectedSquare». Если бы Main расширял MovieClip, это не было бы проблемой, поскольку MovieClips может иметь динамически создаваемые ссылки.

Предлагаемое изменение дочерней функции:

public function dragSquare(evt:MouseEvent):void
{
    (parent as Main).selectedSquare = this;
    parent.addChild(this);
    this.startDrag();
}
1 голос
/ 12 апреля 2010

Другая причина, по которой это может не сработать, заключается в том, что вы пытаетесь использовать свойство parent непосредственно перед добавлением дочернего элемента в список отображения родителя.

Sprite(parent).selectedSquare = this;
parent.addChild(this);

Эта вторая строка меня беспокоит. В этом коде текущий объект (this) должен быть уже добавлен в качестве дочернего к родительскому объекту (Main), чтобы первая строка работала правильно. Таким образом, либо текущий объект еще не является дочерним по отношению к родительскому объекту, в этом случае вам необходимо пересмотреть код.

Или вторая строка не нужна (потому что this уже является потомком Main, поэтому this.parent, или просто parent, работает как положено).

Я считаю, что ваш код, вероятно, настроен хорошо. Вам просто не нужна эта вторая строка, так как она полностью избыточна.

Надеюсь, это поможет! Дайте мне знать, если вы хотите, чтобы я что-то прояснил.

(Это, конечно, при условии, что вы еще не знали всего этого и не делали какую-то безумную, мистическую, странную магию с избыточным вызовом addChild. Вы никогда не сможете сказать с волшебниками!)

...