PDA

Просмотр полной версии : создание представителей класса на сцене вручную


s8000_1
09.06.2007, 00:31
Всем привет.
Поискал по форуму, так и не нашел решения проблемы.
Которая заключается в следующем:

Я создал отдельный класс (допустим

class myClass extends MovieClip{
...
}

После этого хочу, чтобы некоторые мувики из библиотеки принадлежали этому классу. Для этого я выделяю клип в библиотеке мышой, жму linkage, далее export for action script и там пишу название класса. Однако возникает проблема, что нельзя нескольким мувикам присвоить один и тот же класс, возникает алерт:
http://keep4u.ru/imgs/b/070608/d007fd216da9c99b4f.jpg.

Итак, каким образом можно создать "вручную" методом копирования из библиотеки мувиков, которые обладали бы свойствами моего класса?

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

etc
09.06.2007, 00:36
Написать общий класс и в либе понаделать кучу его наследников (т.е. в Base class пишешь имя общего класса, а имя класса какое-нибудь произвольное, с автоматической генерацией).

s8000_1
09.06.2007, 00:47
И правда! Спасибо большущее. А я-то 1001 способ придумывал, как можно этот алерт обойти (включая использование прототипа класса MovieClip), а строки base-то и не заметил.
Проблема решена.

Racer
13.06.2007, 01:18
Кошмар! Я разочарован....

etc
13.06.2007, 01:30
Чем, простите? Собственно, меня больше интересует, каким образом автор темы собирался создавать разные экземпляры класса с одним именем… Даже если логически рассуждать, то это невозможно.

s8000_1
13.06.2007, 14:40
Чем, простите? Собственно, меня больше интересует, каким образом автор темы собирался создавать разные экземпляры класса с одним именем… Даже если логически рассуждать, то это невозможно.

экземпляры одного и того же класса (у которого одно имя)

etc
13.06.2007, 15:04
Проблемя, понятное дело, решена, но я хотел описать, что же планировалось сделать в самом начале: задав одно и то же имя класса разным элементам в библиотеке, каким-то образом потом их создавать. Ну и откуда флешу знать, какой именно брать элемент из библиотеки брать?

Racer
15.06.2007, 00:53
2 __etc: Да не, всё путём. Меня ввело в заблуждение это "смещение" обозначений классов.
Вся эта игра с классами ничего хорошего не несет.
Как-то странно, когда одному объекту соответствуют два класса (Class и Base class). Не кажется ли, что тут какое-то нарушение принципов ООП?
Я даже не могу понять как это назвать... Вроде и не множественное наследование...

etc
15.06.2007, 01:53
Нет никакого нарушения. Это называется наследование.

Racer
15.06.2007, 02:26
мда... чем дальше влез тем жирнее партизаны...

Всё ясно. Можно либо то либо это. Вместе нельзя.
Либо Class наследник Movieclip, либо Base Class наследник Movieclip... Вместе - ругается. А нафиг такой изврат? Почему нельзя как раньше юзать один класс тот что Base Class? Зачем еще добавили индивидуальный? Всёравнож дублировать.

Идея в принципе понята.... Но создается впечатление что чото перемудрили...
Подозреваю что это связано с новой структурой АС3.

Если задан Class, то инстанцируется то что в Class, а обязательно ли чтобы Class был потомком Base class?

А если задан Base class, то то что написано в Class игнорируется? или то что в Class автоматом является потомком от Base class и оно же инстанцируется?

etc
15.06.2007, 02:31
Class > Base Class > MovieClip, по-моему логично. Ничего не перемудрили, контент конкретного экземляра конкретного класса не может быть разным, как это было в AS2 и это правильно.

BlooDHounD
15.06.2007, 12:16
to Racer, в поле class вы ишите имя нового класса. того самого, экземпляры которого будите создавать, а в base class пишите класс от которого он должен наследоваться (если надо).

класса в поле class вообще может не существовать.

Racer
15.06.2007, 16:11
В итоге, что я понял :) :

1. Поле Class определяет класс, который будет создаваться из АС. Например: var c:Circle = new Circle();.
2. Класс в поле Class должен быть потомком класса Base class. (вопрос: обязательно ли Base class в этом случае должен быть одним из стандартных классов MovieClip или Sprite?)
3. Если нам нужно управлять семейством символов с помощью одного класса, мы вводим этот класс в поле Base class. При этом поле Class может содержать потомка Base class (стандартный?), либо имя символа (по умолчанию). Причем, создавая символ из АС, мы будем создавать то что в поле Class, а если символы уже есть в таймлане, собственно, поле Class вообще не имеет значения.
4. Равноценно для класса, потомка (например) movieclip: если, вводим его в свойство Class, и если вводим его в Base class. Разница лишь в том, какое имя будет указываться при создании из АС (в первом случае это будет имя класса, во втором - имя символа).

etc
15.06.2007, 16:14
2. Да, если это объект мувик. Base class должен наследоваться от MovieClip или Sprite;
3. Ничего не понял из этой каши в чужой голове;
4. См. п. 3.

vapes
15.06.2007, 17:31
Racer изучи подробнее ООП особенно наследование, да и про паттерн factory можешь прочитать. От класса родителя могут наследоватся скольугодно "чилдренов".

Racer
15.06.2007, 19:19
2 __etc: Короче, мы друг друга не поняли... Ладно, разберемся, невпервой.
2 vapes: ООП я уже больше 10 лет юзаю, и паттерны в том числе, так что сам могу поучить кого угодно. В данном топике меня интересует не ООП, а технические новшества 9го flash, тк я только начинаю на него переходить.

BlooDHounD
15.06.2007, 22:24
ООП я уже больше 10 лет юзаю, и паттерны в том числе, так что сам могу поучить кого угодно.Слава богу, что Вы не мой учитель.

класса в поле класс может вообще не быть, тогда флэш его сгенерит сам.
Если не указать base class будет что-то типа:public class MyClass extends MovieClip {}Если, base class указать то сгенериться, что-то типа:public class MyClass extends BaseClass {}при этом BaseClass должен наследовать как минимум от Sprite. и т.д.

Если у тебя класс указанный в поле class описан, то поле base class вообще можно не заполнять. и так понятно откуда он наследуется.

Racer
15.06.2007, 23:58
2 BlooDHounD: Спасибо за помощь, друг, я уже во всем разобрался.