PDA

Просмотр полной версии : Super.addChild видимо added не происходит


in4core
09.01.2011, 19:07
Такой вот пример :
Есть Main класс и есть некоторый класс SubClass extends Main.
Итак,

public function gotoMaterials() {
trace(super.numChildren); // 1
var sh:Shape = new Shape();
sh.graphics.beginFill(0xFFFFFF);
sh.graphics.drawRect(0, 0, 100, 100);
sh.graphics.endFill();
sh.x = 300;
super.addChild(sh);
trace(super.numChildren); // 2
}

Но на сцене не появляется. С чем это связано?

iNils
09.01.2011, 19:20
У меня вопрос по оформлению. Очень сложно убрать лишнею табуляцию перед отправкой сообщения?

Наверно потому, что создается sh, а добавляется tf?

in4core
09.01.2011, 19:22
Сорри там sh это я тут описался когда добавлял. Так что вопрос открыт

alatar
09.01.2011, 19:26
У вас фон случаем не белый?

samana
09.01.2011, 19:28
А где создан SubClass? Ведь не получится создать экземпляр SubClass который extends Main , в Main классе.

in4core
09.01.2011, 19:31
Фон случаем не белый.

Там большая стурктура. В Main создается экземпляры класса кнопок, при нажатии на кнопку ( внутри класса кнопки) создается экземпляр того самого SubClass который extends Main и из него уже как я описал выше идет super.addChild

iNils
09.01.2011, 19:32
Сорри там sh это я тут описался когда добавлял. Так что вопрос открыт
А табуляцию поправить сложно?

in4core
09.01.2011, 19:36
Инилс я вроде поправил, может быть я не понял о чем ты ((

alatar
09.01.2011, 19:41
В Main создается экземпляры класса кнопок, при нажатии на кнопку ( внутри класса кнопки) создается экземпляр того самого SubClass который extends Main и из него уже как я описал выше идет super.addChild
И вы конечно решили, что sh добавится в Main, а не в SubClass?
Инилс я вроде поправил, может быть я не понял о чем ты ((
Имелось ввиду поправить отступы в коде
trace(super.numChildren) // 1
var sh:Shape = new Shape()

in4core
09.01.2011, 19:49
Ну конечно же я так решил, ведь addChild то делается для Main !!! Да и вообще в трейсах я показал что элемент на Main добавляется, тока его не видно чей то

alatar
09.01.2011, 19:53
В трейсах видно, что ребенок добавился к экземпляру SubClass используя реализацию метота addChild суперкласса. К экземпляру класса Main это отношения не имеет.

samana
09.01.2011, 19:55
Так вроде метод super это не ссылка на "родителя" класса, а вызов его методов для класса который его расширяет. Ведь вы можете создать только расширяющий класс, без создания основного (которым он был расширен). И как тогда вы можете добавить addChild в базовый класс, который и не создан в приложении?
То есть, если вы создаёте класс Holder расширяющих класс Sprite и вызываете метод addChild(child) в нём, то child добавляется ведь к Holder, а не к Sprite.

in4core
09.01.2011, 20:11
ну я же вызываю не метод addChild, а вызываю метод super.addChild а это разные вещи, не ?

Тоесть по вашему

class Holder extends Sprite

addChild(someClip) === super.addChild(someClip) да ?

alatar
09.01.2011, 20:12
Если метод не переопределен (override) в Holder, то да.

cleptoman
09.01.2011, 22:35
super.someMethod - это обращение к методу определенном в родителе, а не к родителю с его методом..короче - не путайте эти штуки.

dimarik
09.01.2011, 23:49
А табуляцию поправить сложно?

Я поправил =)

Добавлено через 1 минуту
ну я же вызываю не метод addChild, а вызываю метод super.addChild а это разные вещи, не ?

Тоесть по вашему

class Holder extends Sprite

addChild(someClip) === super.addChild(someClip) да ?

А в чем там проблема?
trace( addChild === super.addChild );