Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Отличие Sprite от DisplayObject и прочего (http://www.flasher.ru/forum/showthread.php?t=137689)

NBVestal 20.03.2010 11:16

Отличие Sprite от DisplayObject и прочего
 
Чем отличается тип Sprite от DisplayObject ? И вообще, в чём соль этого DisplayObject? При изменения типа объекта со Sprite на DisplayObject разницы никакой не могу увидеть. Может, кто-то разъяснит?

orcpochta 20.03.2010 11:25

http://help.adobe.com/ru_RU/AS3LCR/F...layObject.html

NBVestal 20.03.2010 11:55

Документацию то я читал...просто хотелось бы на конкретном примере, а то не совсем въезжаю

orcpochta 20.03.2010 12:04

Если не въезжаете, то для начала вам надо почитать что-нибудь по общей теории ООП и наследованию)))

asterion 20.03.2010 18:53

В ActionScript 3.0 все появляющиеся на экране в приложении элементы принадлежат к типу экранных объектов. В пакет flash.display входит класс DisplayObject, который является базовым классом, расширяемым рядом других классов. Эти классы представляют разные типы экранных объектов, включая векторные фигуры, фрагменты роликов и текстовые поля.

Если вам необходим объект, который будет служить контейнером для других экранных объектов (рисование на экранном объекте с помощью ActionScript), выберите один из подклассов DisplayObjectContainer:
• Sprite (если объект будет создан только с помощью ActionScript или в качестве базового класса для
заказного экранного объекта, который будет создаваться и обрабатываться исключительно средствами
ActionScript).
• MovieClip (если вы создаете переменную, относящуюся к символу фрагмента ролика, созданному в
инструменте разработки Flash).
• Если вы создаете класс, который будет связан с символом фрагмента ролика в библиотеке Flash, выберите один из указанных ниже подклассов DisplayObjectContainer в качестве базового класса вашего класса:
• MovieClip (если связанный символ фрагмента ролика имеет содержимое более чем в одном кадре)
• Sprite (если связанный символ фрагмента ролика имеет содержимое только в первом кадре)

Все просто.

Crenth 20.03.2010 19:20

Цитата:

Сообщение от NBVestal (Сообщение 894358)
Чем отличается тип Sprite от DisplayObject ? И вообще, в чём соль этого DisplayObject? При изменения типа объекта со Sprite на DisplayObject разницы никакой не могу увидеть. Может, кто-то разъяснит?

вы пришли в автосалон. сели в жигули. там есть руль и колеса.
потом сели в мерседес. там есть руль и колеса.
между этими двумя представителями автогигантов нет разницы, если их рассматривать как средства передвижения

Однако, я думаю, что sprite отличается от movieclip
но ни тот ни другой не отличаются друг от друга, если их рассматривать как DisplayObject
ибо все они суть одно - displayobject

TERRORist 20.03.2010 20:41

Цитата:

Сообщение от Crenth (Сообщение 894418)
Однако, я думаю, что sprite отличается от movieclip
но ни тот ни другой не отличаются друг от друга, если их рассматривать как DisplayObject
ибо все они суть одно - displayobject

А наличие или отсутствие анимации разве не является отличием?

koIIImarik 20.03.2010 21:46

2 Crenth:
Выше уже написали, что основное отличие Sprite от Movie Clip в том, что второй поддерживает возможность работы с временной шкалой (читай создавать в клипе несколько кадров).

В качестве своих 5-ти копеек к основному вопросу добавлю:
Так уж получилось, что чаще использую Sprite, чем DisplayObject или DisplayObjectContainer, хотя во многих ситуациях функционал Sprite не нужен. На сколько я знаю, Sprite реализует интерфейс для программного рисования (свойство graphics у клипов), а DisplayObject и DisplayObjectConatiner — нет.

Crenth 21.03.2010 05:06

ну да, все верно.
мерседес позволяет перемещаться по шкале времени
а жигули, увы :)

iNils 21.03.2010 06:00

Цитата:

Сообщение от koIIImarik (Сообщение 894427)
Так уж получилось, что чаще использую Sprite, чем DisplayObject или DisplayObjectContainer, хотя во многих ситуациях функционал Sprite не нужен. На сколько я знаю, Sprite реализует интерфейс для программного рисования (свойство graphics у клипов), а DisplayObject и DisplayObjectConatiner — нет.

DisplayObject и DisplayObjectContainer - абстрактные классы, их нельзя создать.

Psycho Tiger 21.03.2010 12:33

Вот это сильно раздражает кстати, часто нужен просто контейнер, чтобы его двигать, а Sprite для этого кучу ненужной ерунды ещё создаёт. В принципе, ерунда не мешает, но не красиво.

iNils 21.03.2010 15:50

Что вы придумываете? У Sprite на 6 свойств больше (buttonMode, dropTarget, graphics, hitArea, soundTransform, useHandCursor), чем у DisplayObjectContainer + два метода (startDrag, stopDrag). Чем это раздражает?

asterion 21.03.2010 21:23

koIIImarik, а как же вы тогда используете "DisplayObject или DisplayObjectContainer"???? Потому что их действительно нельзя создать. Но, правда, если я не ошибаюсь, ошибки не вызовет если переменной-наследнику класса DisplayObject обявить типом DisplayObject. Разве что так...

koIIImarik 21.03.2010 22:30

2 iNils:
Да, точно, как-то раньше и не замечал, что их нельзя создавать, наверно просто объявлял тип данных для объектов при необходимости.

2 asterion:
Вы абсолютно правы, я объявлял такие типы данных.

Котяра 22.03.2010 09:56

Проще говоря DisplayObject это класс Машина
Sprite - это конкретная модель, например ВАЗ 2109,
MovieClip - например, ВАЗ 2121
т.е. нельзя купить (создать) абстрактную Машину - это всегда либо Девятка(Sprite), либо Нива(MovieClip).
Обе машины могут ехать, а могут и не ехать))
Только в ниве добалено свойство - "раздатка" и "полный привод".
Расширяя класс девятки вы навешиваете своего тюнинга: быдлоспойлеры, тонировка стёкол, надпись HOOLIGAN на заднем стекле...
Но девятка не перестаёт быть девяткой, также как не перестаёт быть машиной (хотя это заявление, в данной аналогии можно оспорить)))))

NBVestal 22.03.2010 10:46

Цитата:

Сообщение от iNils (Сообщение 894505)
DisplayObject и DisplayObjectContainer - абстрактные классы, их нельзя создать.

Но вот можно например создать переменную с тимпом DisplayObject:

Код AS3:

var obj:DisplayObject;

Чем она будет отличаться от спрайта?

Код AS3:

var obj:Sprite;

Есть предположение, что границей объекта, или я не прав?

А за вышесказанные объяснения о наследовании и доп. свойствах объектов благодарю - стало понятней)

Wolsh 22.03.2010 10:53

Тем что Вы не сможете вызвать у
Код AS3:

var obj:DisplayObject

методы класса Sprite.

Котяра 22.03.2010 11:11

Цитата:

Сообщение от NBVestal (Сообщение 894712)
Код AS3:

var obj:DisplayObject;


этим вы не создали объект, а создали переменную которая ссылается на объект типа
DisplayObject ( Машина - доступны методы "ехать", "не ехать").

создание происходит так:

Код AS3:

var obj:DisplayObject = new DisplayObject ()

Цитата:

ArgumentError: Error #2012: DisplayObject$ class cannot be instantiated.

NBVestal 22.03.2010 11:27

Ну про создание я понимаю, но вот к примеру в библиотеке есть мувиклип с линком на экспорт "boom". Чем

Код AS3:

var tekushee:DisplayObject;
tekushee = new boom();

будет отличаться от

Код AS3:

var tekushee:Sprite;
tekushee = new boom();

?

Котяра 22.03.2010 11:37

тем что tekushee может быть кроме спрайта и мувиклипом и текстфилдом и битмапой. (в первом случае) а во втором только спрайтом
ЗЫ не надо tecushee - назовите currentObject )

nOobCrafter 22.03.2010 12:21

имхо лучше вернуться к началу обсуждения и юзать спрайты когда нам не надо трогать таймлайн и мувики когда надо, то что у спрайта на пару методов \ св-в больше чем у диплейобджектконтейнера имхо роли особо не играет)

Котяра 22.03.2010 12:39

имхо - нужно юзать то, что нужно юзать.
если всегда будут спрайты - юзать спрайты.
если могут быть не только спрайты, а любой отображаемый объект - юзать DisplayObject или DisplayObjectContainer - если нужна интерактивность (добавление листенеров на события мыши)

Psycho Tiger 22.03.2010 15:10

Цитата:

Сообщение от iNils (Сообщение 894564)
Что вы придумываете? У Sprite на 6 свойств больше (buttonMode, dropTarget, graphics, hitArea, soundTransform, useHandCursor), чем у DisplayObjectContainer + два метода (startDrag, stopDrag). Чем это раздражает?

Не, я про другое, не так выразился.
Хочется класс который имеет 2 метода: addChild() и removeChild().

iNils 22.03.2010 15:29

Цитата:

Сообщение от Psycho Tiger (Сообщение 894808)
Хочется класс который имеет 2 метода: addChild() и removeChild().

Легко.
Код AS3:

package  {
        import flash.display.*;
        public class Container {
                private var _parent:DisplayObjectContainer = null;
                public function Container (parent:DisplayObjectContainer) {
                        _parent = parent;
                }
                public function addChild (child:DisplayObject):DisplayObject {
                        _parent.addChild (child);
                }
                public function removeChild (child:DisplayObject):DisplayObject {
                        _parent.removeChild (child);
                }
        }
}


NBVestal 22.03.2010 20:50

С отличием и происхождением Sprite и DisplayObject всё понятно...

А вот каково отличие DisplayObject и DisplayObjectContainer ? Методом смены типа переменных я их так и не нашёл...с виду всё одинаково, или я чего-то не учёл...

Psycho Tiger 22.03.2010 21:09

iNils, я тоже так могу :) Только практического смысла в этом 0. Хотя, наверно, моё желание бред на 100%.

asterion 22.03.2010 21:59

Вложений: 1
Все дело в наследовании:

mayakwd 22.03.2010 22:02

NBVestal DisplayObject не содержит чайлдов (у него нет методов addChild, removeChild, addChildAt и т.д.)

NBVestal 22.03.2010 22:07

Цитата:

Сообщение от mayakwd (Сообщение 894927)
NBVestal DisplayObject не содержит чайлдов (у него нет методов addChild, removeChild, addChildAt и т.д.)

Спасибо большое, теперь всё становится на свои места в моей голове =)

Цитата:

Сообщение от asterion (Сообщение 894925)
Все дело в наследовании:

asterion, а не подскажете, где подобную схемку достали? Хотелось бы по другим объектам так наглядно наследование посмотреть...

asterion 22.03.2010 22:14

Книга Программирование на ActionScript 3.0

http://dl.************/u/3296887/flas...Script_3.0.pdf

Страница 301

cleptoman 22.03.2010 22:54

iNils, а интересно как с событиями работать в таком классе )


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

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