Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Конфликт имен при наследовании мувика другим мувиком (http://www.flasher.ru/forum/showthread.php?t=209431)

MyDuty 10.11.2014 17:34

Конфликт имен при наследовании мувика другим мувиком
 
Один мувик наследуется другим, и оба имеют текст филды, добавленный не програмно, а нарисован в IDE. Кроме того эти текст филды имеют одинаковое название (для того что бы наследуемый функционал имел доступ к текст филду в наследнике), вот на это флэш и ругается... Я так понял, что данная реализация не совсем правильная, так что подскажите как бы его правильней реализовать, желательно без отказа от "ручной рисовки".
п.с. Рассматриваю вариант композиции, но по-моему, это вообще изврат...

samana 10.11.2014 21:10

По-идее вам не нужно рисовать (вручную) в наследуемом классе текстовое поле, так как оно и так в нём создастся.

MyDuty 10.11.2014 21:39

2 samana
 
у меня оба мувика нарисованы вручную и лежат в библиотеке, так что наследник ничего не получит, даже если будет пустым... Я так понимаю, что наличие его в библиотеке предполагает свое "изображение", которое перезаписывает наследуемое.

п.с. Я тут так подумал, что лучше обращаться к текст филдам не по имени, а по ссылке, которую давать в конструкторе в зависимости от класса(мувика). А имя дать текст филдам разные. Что скажете?

dimarik 10.11.2014 22:38

А что вы подразумеваете над понятием "имя" или "название" мувика? Мне сразу приходит в голову только DispalyObject#name. Я вас уверяю, что это свойство не может быть уникальным. Может быть сколь угодно много объектов-детей с одним и тем же "именем" у заданного контейнера. Не знаю какого дитя среди прочих с одинаковым названием предпочтет вернуть метод DispalyObjectContainer#getChildByName(), но скорее всего это будет один и тот же объект.

КорДум 10.11.2014 22:41

Воспользуйтесь композицией. То есть классы с наследниками так и остаются, только вот они не прилинкованы к мувиклипу во FlashIDE, а используют создаваемый мувиклип в себе через обычную ссылку-свойство, которая как раз и будет наследоваться.

dimarik 10.11.2014 22:51

Вот чисто для моего любопытства, можете ли вы дать swf с минимальным примером? Немного не понимаю в чем у вас проблема.

MyDuty 10.11.2014 23:14

2 dimarik:
Цитата:

А что вы подразумеваете над понятием "имя" или "название" мувика?
под именем (и названием) я имел в виду имя экземпляра, которое дается в IDE, так как он там же и нарисован...

2 КорДум:
на сколько я понял, мувика не будет видно на сцене во время "разработки", а в этом-то и вся запара с рисованием вручную... так бы я давно все динамично (программно) нарисовал. Но вероятней всего буду использовать все-же "композицию", точнее вложу один мувиклип во второй, потому как "внезапно" вспомнил, что у меня почти все методы статичные, а значит не наследуются через экстенд, так что только композиция...

2 dimarik:
Цитата:

Вот чисто для моего любопытства, можете ли вы дать swf с минимальным примером?
да там и давать то нечего, просто в библиотеке Мувик(как клас), в котором текст филд которому дано имя(см. выше), и другой Мувик - копия предыдущего только в нем потом дорисовано кое-что. В библиотеке они прилинкованы с классами, где и происходит наследование...

cleptoman 10.11.2014 23:31

у вас, вероятно, стоит галочка "Автоматически объявлять экземпляры в рабочей области" в настройках AS.
соотв. и в супеер и мувике наследнике объявляются одноименные паблик свойства, которые и приводят к конфликту. снимите галку и попробуйте. но надо иметь ввиду, что теперь надо ручками получить сслки на инстансываших текстовых полей..например через getChildByName

silin 11.11.2014 00:30

Вложений: 1
ну да, пытаясь создать в наследнике уже объявленное в родительском классе свойство, IDE неизбежно попадает на конфликт
как вариант общий функционал завязать не на сам текстфилд, а на геттер(его-то можно спокойно переписать в наследнике), и в этом геттере в каждом классе подсовывать свой текстфилд

silin 11.11.2014 10:46

>> Я тут так подумал, что лучше обращаться к текст филдам не по имени, а по ссылке, которую давать в конструкторе в зависимости от класса(мувика). А имя дать текст филдам разные.

дада, тоже можно, но доступ к свойству будет только после выполнения конструктора наследника
т.е. либо в суперконструкторе не должно быть этого общего функционала, либо в нем самом надо определять класс экземпляра и давать соответствующую ссылку
типа
Код AS3:

public class ClassA extends Sprite 
{
        public var tf:TextField;
        public function ClassA()
        {
 
                switch(getQualifiedClassName(this))
                {
                        case "ClassA":tf = getChildByName("tf_A") as TextField; break;
                        case "ClassB":tf = getChildByName("tf_B")as TextField; break;
                        default: throw("неучтенный наследник");
                }
                tf.text = this + "  y=" + y;
        }
 
}



Часовой пояс GMT +4, время: 12:43.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.