Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   попытка разобраться с классами (http://www.flasher.ru/forum/showthread.php?t=114535)

gloomyBrain 01.08.2008 00:29

попытка разобраться с классами
 
сразу к сути:
Есть в библиотеке несколько мувиклипов. И есть (вернее в разработке) класс, содержащий свойства и методы. По задумке при вызове конструктора класса ему (конструктору) передаётся параметр, говорящий о том, какой именно мувиклип необходимо приаттачить из библиотеки и наделить оный же описанным в теле класса набором свойств и методов.
Как я понимаю, класс должен начинаться так:

Код:

class Unit extends MovieClip{
...
}

Помогите пожалуйста с видом конструктора класса. Как передать в конструктор параметр? И как научить основной таймлайн создавать объекты этого класса?

:wacko:

wvxvw 01.08.2008 00:43

Если классу клип передается в параметре, то зачем его от MpvieClip наследовать?
Конструктор в АС - одноименная с классом функция объявленная в теле класса. В АС2 может быть и public и private, не может возвращать значение.
Импортировать класс:
Код:

import my.class.location.MyClass;
При условии, что:
Папка my находится на класспассе.
В папке my есть папка class, в ней location, а в этой последней есть файл MyClass.as.
Класс MyClass объявлен как
Код:

my.class.location.MyClass extends [whatever] implements [whatever]
{
public function MyClass(clip:MovieClip)
{
super();
}
}

Путь к классу принято составлять по такому принципу:
[домейн третего уровня вашего сайта: пример com].[домейн второго уровня вашего сайта: пример mysite].[логическая категория, к которой можно отнести класс: пример utilities].
Т.е. если ваш сайт находится по аддрессу: www.mysite.com, то класс будет называться как-нибудь так:
com.mysite.utilities.MyClass

gloomyBrain 01.08.2008 01:01

Спасибо большое wvxvw !
пока всё понятно, и(!) даже работает
Буду эксперементировать

gloomyBrain 01.08.2008 01:34

кстати еще вопросик возник:

приаттачить клип получилось так
Код:

class Unit {
        private var _type:String = null;
        public function Unit(sType:String, sName:String) {
                _root.attachMovie(sType, sName, _root.getNextHighestDepth());
        }
}

но это не лучший вариант в моём понимании. Ведь возникнет необходимость отслеживать изменение свойств мувика
и тогда придётся делать через watch()
не охота =)

А можно ли мувик из библиотеки сделать экземпляром класса и как?
С учётом того что какой именно мувик - изначально неизвестно

crazyone 01.08.2008 12:43

Цитата:

Путь к классу принято составлять по такому принципу:
[домейн третего уровня вашего сайта: пример com].[домейн второго уровня вашего сайта: пример mysite].[логическая категория, к которой можно отнести класс: пример utilities].
Я, конечно, не эксперт в этом деле, но что-то мне подсказывает, что общепринятый принцип немного другой и к доменному имени сайта относится не сильно:

[Часть, отвечающая за назначение и условия распространения проекта. Я встречал com и org, что говорит о коммерческом или организационном назначении].[имя автора или название авторской организации].[имя проекта].[логическая категория, к которой можно отнести класс: пример utilities].[Название класса]


Цитата:

А можно ли мувик из библиотеки сделать экземпляром класса и как?
С учётом того что какой именно мувик - изначально неизвестно
Да, нужно в свойствах Linkage этого мувика указать поле AS 2.0 class.

wvxvw 01.08.2008 15:36

Систему именования просто позаимствовали из Джавы, откровенно говоря, я не совсем понимаю зачем нужны вообще com/org/что бы то ни было в начале. Т.как эти сокращения давным давно потеряли свое прямое значение. Пример, классы senocular находятся в пакете com.senocular.[whatever], и при этом они используют GDL т.е. абсолютно не коммерческие. просто его сайт тоже senocular.com. Да и вообще, почему-то каждый считает своим долгом изобрести колесо, когда придумывает как ему называть классы =) У MDM, например, классы почему-то называются mdm.[whatever].[ClassName] ну и т.д.
Но в Джаве есть смысл называть именно иcxодя из названия сайта т.как потом легче будет в автоматическом режиме апдейтить импортированые библиотеки, во флеш такая штука пока никак ни в одном ИДЕ не предусмотрена, но я бы все-таки следовал этому принципу, чтобы в случае, если кто-то реализует, можно было бы воспользоваться, а не переделывать =)

crazyone 01.08.2008 18:41

что такое GDL?

Ну вообще стандартов нет, насколько я знаю =) Потому можно использовать, как удобнее.

gloomyBrain 02.08.2008 00:02

по поводу линкейджа в библиотеке - тогда придётся всем мувикам прописывать
я собираю конструктор, который САМ определяет какой мувик добавить и исходя из этого - какие свойства и методы назначить помимо стандартных мувиклиповских

Инженерная мысль дошла вот до чего
Код:

class Unit{
  private var _type:String=null;
  public function Unit(sTipe:String, sName){
      var myClip:MovieClip = _root.attachMovie(sType, sName, _root.getNextHighestDepth())
  }
  //самое интересное
  public function get _x(){
      return myClip._x
  }
  public function set _x(){
      myClip._x=_x
  }
}

Сразу прошу извинить за сырой и неопробованный код, но...
а осуществим такой подход? как вы думаете?

crazyone 02.08.2008 03:52

Так а что вы сделать хотите-то?

wvxvw 02.08.2008 03:56

Цитата:

Сообщение от crazyone (Сообщение 755818)
что такое GDL?

GDL = General Developer License.
В принципе, аналогично GPL (General Public License). С разницей в том, что специально указано, что код можно модифицировать как угодно, использовать в своих коммерческих проэктах и т.п.

Цитата:

Сообщение от gloomyBrain
Сразу прошу извинить за сырой и неопробованный код, но...
а осуществим такой подход? как вы думаете?

Да, осуществим, это даже есть такой шаблон проэктирования, называется "обертка". Только в случае с АС2, лучше свойства/методы у класса-обертки по-другому как-нибудь называть, а то например, если создать метод onRelease, то потом могут возникнуть сложности с его вызовом, а так вообще идея нормальная, по такому же принципу сделан класс UIObject.


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

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