Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   MovieClip vs Sprite (http://www.flasher.ru/forum/showthread.php?t=142076)

aliim 10.07.2010 22:18

MovieClip vs Sprite
 
[BlooDHounD: эта тема была создана из темы Как с помощью loader многократно использовать картинку?]

Код AS3:

import flash.display.MovieClip;
import flash.events.Event;
import flash.display.BitmapData;
 
var imgfon = new Loader();
var mc1:MovieClip = new MovieClip  ;
var mc2:MovieClip = new MovieClip  ;
 
var r = new URLRequest("image.jpg");
imgfon.load(r);
imgfon.contentLoaderInfo.addEventListener(Event.COMPLETE, go);
 
function go(e:Event) {
        var bd:BitmapData = Bitmap(imgfon.content).bitmapData;
        mc1.addChild(new Bitmap(bd,"auto",true));
        mc2.addChild(new Bitmap(bd,"auto",true));
}
 
addChild(mc1);
addChild(mc2);


Wolsh 11.07.2010 01:16

...зачем какие-то мувиклипы, если достаточно спрайта или даже шейпа? Зачем грузить память ненужным функционалом?

aliim 11.07.2010 04:13

Цитата:

Сообщение от Wolsh (Сообщение 921327)
зачем какие-то мувиклипы, если достаточно спрайта или даже шейпа? Зачем грузить память ненужным функционалом?

это уже автору решать, что ему нужно, спрайт или мувиклип, мне это неведомо
если бы я использовал Шейп, Вы бы спросили, а почему шейп, а если автору нужен дополнительный функционал? лучше клип

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

iNils 11.07.2010 04:52

Цитата:

это уже автору решать, что ему нужно, спрайт или мувиклип, мне это неведомо
100% ему нужен Sprite
Цитата:

если бы я использовал Шейп, Вы бы спросили, а почему шейп
У Shape нет метода addChild.
Цитата:

а если автору нужен дополнительный функционал? лучше клип
А какой функционал есть у программно созданного MovieClip?

Wolsh 11.07.2010 09:13

Вот не надо делать вид, что я тупо решил попридираться. Я абсолютно не понимаю, почему для вывода на сцену картинки нужно создавать экземпляр класса МувиКлип, плюс к этому - экземпляр класса Битмап, да еще и клонировать БитмапДату. Не слишком ли много кортежа для одного изображения? По-минимуму нужен только Шейп, залитый методом beginBitmapFill(). Если требуется интерактивность - Спрайт, залитый методом beginBitmapFill(). Если планируются операции по обработке изображения - только тогда может понадобиться Битмап (и то необязательно). И уж точно не понадобится МувиКлип с его временной шкалой и кучей методов для работы с ней. Иначе Вы платите не столько за семечки, сколько за вакуумную упаковку с золотым напылением и полноцветной печатью.

aliim 11.07.2010 22:28

Цитата:

Сообщение от Wolsh (Сообщение 921363)
Вот не надо делать вид, что я тупо решил попридираться. Я абсолютно не понимаю, почему для вывода на сцену картинки нужно создавать экземпляр класса МувиКлип, плюс к этому - экземпляр класса Битмап, да еще и клонировать БитмапДату. Не слишком ли много кортежа для одного изображения? По-минимуму нужен только Шейп, залитый методом beginBitmapFill(). Если требуется интерактивность - Спрайт, залитый методом beginBitmapFill(). Если планируются операции по обработке изображения - только тогда может понадобиться Битмап (и то необязательно). И уж точно не понадобится МувиКлип с его временной шкалой и кучей методов для работы с ней. Иначе Вы платите не столько за семечки, сколько за вакуумную упаковку с золотым напылением и полноцветной печатью.

объясняю:
1. Экземпляр класса МувиКлип занимает в памяти примерно на 20 байт больше, чем Спрайт. Создайте тысяч 10 того и другого и сравните System.totalMemory (я сравнивал). Так что рассказы о том, что клип несет на себе огромный тяжелый функционал не соответствуют действительности.
Весь стандартный функционал Спрайтов и МувиКлипов, равно как и описание структуры заложено в плеере, а не в Вашем файле, так что никуда Вы его не притащите, даже если захотите. Если, например, таймлайна у клипа нет, его и в памяти нет, вся Ваша плата за использование МувиКлипа составит порядка указанных 20 байт.
Поскольку выделение памяти сильно зависит от внешних факторов, при запуске одного и того же файла несколько раз подряд Вы легко получите разброс в 5-10 Кб, даже без загрузки изображений, так что столь подчеркиваемой Вами разницы между МувиКлипом и Спрайтом в реальности Вы не заметите.
Теперь - зачем?
На практике Вам придется загружать картинки в МувиКлипы (созданные вручную и не Вами) с таймлайном и фреймами. Мне приходится. Так что мне лично удобнее иметь универсальный код, который всегда работает с клипами и я не задумываюсь о том, есть в клипе, с которым я работаю таймлайн или нет.
Если Вам лично не нравится использовать клипы, используйте спрайты, но рассказывать страшилки про огромный функционал и массивность кода не надо, ибо их нет. Видимых без микроскопа "преимуществ" Спрайтов тоже нет.

2. Битмап и почему он лучше. Опять же, разница при создании Битмапа вместо просто БитмапДаты составляет несколько байт. За это Вы получаете доступ к двум важным параметрам, влияющим на сглаживание картинки, которые Вы можете менять после того, как она была создана. А менять их, опять же на практике, Вам придется, так же как придется менять размер картинки и прочее. Получив к ним доступ, просто залив прямоугольник beginBitmapFill-ом, Вы не сможете.
Гораздо лучше написать с самого начала легко расширяемый код (и пожертвовать парой байт), чем потом столкнуться с проблемой последующего сглаживания и переписывать его, удаляя все Ваши beginBitmapFill-ы и вводя Битмапы. Занимался этим сам, так что другим советую с самого начала Битмап.

3. Клонирование. Я уже написал два примера, один с клонированием, другой без, используйте, какой хотите, так что вопрос не ясен.
Зачем нужно клонирование вообще?
Затем, что когда Вы загружаете несколько картинок с помощью одного лоадера, beginBitmapFill, как впрочем и Битмар, использует ссылку на текущую БитмапДату лоадера. Так что при загрузке следующей картинки, предыдущая само собой перезапишется. На случай, если их все нужно сохранять, используйте клонирование, пример я уже привел.
ну и поиграться, если кому интересно:
Код AS3:

package {
        import flash.display.MovieClip;
        import flash.display.Sprite;
        import flash.events.Event;
 
        import flash.display.Bitmap;
        import flash.display.BitmapData;
 
        import flash.net.URLLoader;
        import flash.display.Loader;
        import flash.net.URLRequest;
 
        import flash.system.System;
        import flash.events.MouseEvent;
        import flash.geom.Matrix;
 
        public class test extends MovieClip {
 
                var imgfon = new Loader  ;
 
                // использовать объект битмап
                var useBitmap:Boolean = true;
 
                // использовать bitmapFill
                //var useBitmap:Boolean = false;
 
                // использовать мувиклипы
                var mc1:MovieClip = new MovieClip  ;
                var mc2:MovieClip = new MovieClip  ;
 
                // использовать спрайты
                // var mc1:Sprite = new Sprite  ;
                // var mc2:Sprite = new Sprite  ;
 
                public function test() {
                        var r = new URLRequest("image.jpg");
                        imgfon.load(r);
                        imgfon.contentLoaderInfo.addEventListener(Event.COMPLETE,go);
 
                        addChild(mc1);
                        addChild(mc2);
                        mc1.addEventListener(MouseEvent.CLICK,mclick);
                        mc2.addEventListener(MouseEvent.CLICK,mclick);
 
                }
 
                function go(e:Event) {
 
                        var bd:BitmapData = Bitmap(imgfon.content).bitmapData;
 
                        if (useBitmap) {
                                // вариант с битмапом
                                mc1.addChild(new Bitmap(bd,"auto",true));
                                mc2.addChild(new Bitmap(bd,"auto",true));
 
                        } else {
                                // вариант без битмапа
                                mc1.graphics.beginBitmapFill(bd,null,false,false);
                                mc1.graphics.drawRect(0,0,bd.width, bd.height);
                                mc1.graphics.endFill();
                                mc2.graphics.beginBitmapFill(bd,null,false,true);
                                mc2.graphics.drawRect(0,0,bd.width, bd.height);
                                mc2.graphics.endFill();
                        }
                        // проверка, что оба метода ссылаются на данные загрузчика и копирования не происходит
                        // очистка bd удаляет оба изображения
                        // bd.dispose();
 
                        mc1.height = mc1.height * 250 / mc1.width;
                        mc1.width = 250;
                        mc2.height = mc2.height * 250 / mc2.width;
                        mc2.width = 250;
                        mc2.x = 255;
                }
 
                function mclick(e:MouseEvent) {
                        if (useBitmap) {
                                //        изменение сглаживания c помощью smoothing, есть еще pixelSnapping
                                e.currentTarget.getChildAt(0).smoothing = ! e.currentTarget.getChildAt(0).smoothing;
                        }
                        text.text = mc1 + " use Bitmap: " + useBitmap + ", memory usage: " + System.totalMemory;
                }
 
        }
 
}


Wolsh 11.07.2010 23:58

Дело, aliim, не в килобайтах и не в том, что происходит в плеере - я сам когда-то делал флэшки как дизайнер, банеры, сайты, и знаю какие в ИДЕ режимы допуска)) - дело в том, что происходит в голове. Ружье - стреляет, мувиклип листает кадры, битмап отображает изменения БитмапДаты "в реальном времени". Если для Вас простота и достаточность - пустой звук, можно и дальше говорить о "расширяемом" коде с программным созданием новых экземпляров МувиКлипа. Я же показал простой и достаточный, исходя из вопроса, пример вывода несколько раз однажды загруженного файла изображения. Речи об изменении, обработке и даже масштабировании картинки автор не вел, и я не пишу ненужные вещи, чтобы не вводить человека в заблуждения о их необходимости для решения его вопроса. Для вывода изображения достаточно Шейпа.

И еще насчет расширяемости. Ваш код для таймлайна, так что думаю Вы это несерьезно. Но вообще, на будущее - это красивое слово не означает, что у Вас есть один файл и Вы всегда должны "расширяться" (о, боже) от него. Немного посидев, можно заиметь целых ТРИ файла, каждый для своих условий, согласно простоте и достаточности, и расширяйтесь от того, что нужно для текущего проекта. На деле же эта красивая универсальность приводит к системам вроде Flexa, где простая форма входа из двух полей и кнопки обойдется Вам в 240 кб. О расширяемости и универсальности следует говорить в случае мало-мальски крупных проектов, а никак не в случае какого-то процесса загрузки картинки.
И не надо страшилок про "вам придется" - за последние полтора-два года не пришлось, Adobe Flash уже не использую, все делаю в ФД, без редактора графики. Ваша личная ситуация отличается - ОК, я понял, ручная анимация, Ваше право, оперируйте МувиКлипами. Но если речь о программировании, я бы, открыв такой "расширяемый" проект через пару месяцев, стал бы чесать голову - зачем тут МувиКлип, и судорожно бы искал, что же я хотел сделать с его таймлайном. Ружье - чтобы стрелять. Может эта мысль слишком проста, чтобы ее понять?

aliim 12.07.2010 01:28

У всех свое определение слова "простой". Если это желание использовать объекты максимально низкого уровня в иерархии, пожалуйста, Ваше право. Я в этом вижу только примитивизм ради примитивизма. Для меня выгоды в этом нет.

Я предлагаю, как вариант, код, который я считаю таким же "простым", как и Ваш, только способный решать гораздо больший круг задач, если потребуется, без больших телодвижений. В этом смысл моего изначального ответа.

Вы здесь пишете комментарии к МувиКлипам, что они "тяжелые" и "масссивные". Это не так, и я Вам подробно написал почему, вот и все.

Если у Вас мувиклип ассоциируется с чем-то "тяжелым" и "массивным", это Ваша субъективная проблема. Ассоциация с ружьем - это тоже замечательно, если это помогает Вам, отдельно взятому программисту, писать код в ФДТ, в котором Вы не будете путаться.

Для меня Мувиклип - это точно такой же Спрайт, ничем не хуже, только с бОльшим набором функций и свойств, которые мне могут потребоваться, так что я более охотно использую Мувиклип, я вижу в этом только плюс.

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

Насчет таймлайна - я серьезно, Вам может попасться уже сделанный проект, где самым простым решением возникшей проблемы будет встроить загрузку изображения в МувиКлип, на фрейм номер 42.

Насчет расширяемости - тоже. Каждый расширяется от чего и туда, куда ему удобно. Вы, возможно, создадите три файла со Спрайтами, каждый для своих условий, а я, возможно, предпочту иметь один с МувиКлипом, потому что мне это будет проще или быстрее.

Развивать дальше эту тему я не стану, вроде все понятно.

BlooDHounD 12.07.2010 02:41

Цитата:

Сообщение от aliim (Сообщение 921487)
Мой подход не менее и не более "правильный" чем Ваш, он имеет право на существование и я его рекомендую на этом форуме, исходя из своего опыта.

исходя из ваших утверждений, опыта у Вас нет.
Цитата:

Сообщение от aliim (Сообщение 921449)
Экземпляр класса МувиКлип занимает в памяти примерно на 20 байт больше, чем Спрайт. Создайте тысяч 10 того и другого и сравните System.totalMemory (я сравнивал). Так что рассказы о том, что клип несет на себе огромный тяжелый функционал не соответствуют действительности.

зачем проводить такие дурацкие "примерные" тесты, если есть нормальный способ?
Код AS3:

trace( getSize( new MovieClip() ) ); // 452
trace( getSize( new Sprite() ) ); // 420
trace( getSize( new Bitmap() ) ); // 248
trace( getSize( new Shape() ) ); // 248

так мы получили разницу 32 байта.
Цитата:

Сообщение от aliim (Сообщение 921487)
Весь стандартный функционал Спрайтов и МувиКлипов, равно как и описание структуры заложено в плеере, а не в Вашем файле, так что никуда Вы его не притащите, даже если захотите. Если, например, таймлайна у клипа нет, его и в памяти нет, вся Ваша плата за использование МувиКлипа составит порядка указанных 20 байт.
Поскольку выделение памяти сильно зависит от внешних факторов, при запуске одного и того же файла несколько раз подряд Вы легко получите разброс в 5-10 Кб, даже без загрузки изображений, так что столь подчеркиваемой Вами разницы между МувиКлипом и Спрайтом в реальности Вы не заметите.
Теперь - зачем?

а зачем мне вообще создавать мувиклипы, если там нет таймлайнов? зачем шахтёру в шахте телескоп?
Цитата:

Сообщение от aliim (Сообщение 921487)
На практике Вам придется загружать картинки в МувиКлипы (созданные вручную и не Вами) с таймлайном и фреймами. Мне приходится.

сочувствую.
Цитата:

Сообщение от aliim (Сообщение 921487)
Гораздо лучше написать с самого начала легко расширяемый код (и пожертвовать парой байт), чем потом столкнуться с проблемой последующего сглаживания и переписывать его, удаляя все Ваши beginBitmapFill-ы и вводя Битмапы. Занимался этим сам, так что другим советую с самого начала Битмап.

ещё раз сочувствую. видимо с написанием расширяемого кода у Вас всё-таки не просто.
Цитата:

Сообщение от aliim (Сообщение 921487)
Зачем нужно клонирование вообще?
Затем, что когда Вы загружаете несколько картинок с помощью одного лоадера, beginBitmapFill, как впрочем и Битмар, использует ссылку на текущую БитмапДату лоадера. Так что при загрузке следующей картинки, предыдущая само собой перезапишется.

а Вы это проверяли? :) или просто из "опыта" знаете?

aliim 12.07.2010 04:31

Цитата:

Теперь - зачем?
Цитата:

Сообщение от BlooDHounD (Сообщение 921502)
а зачем мне вообще создавать мувиклипы, если там нет таймлайнов? зачем шахтёру в шахте телескоп?

ответ приведен как раз после слов "Теперь - зачем?", начиная со следующей строки, читайте исходный пост


Цитата:

Сообщение от BlooDHounD (Сообщение 921502)
а Вы это проверяли?

проверял. код приведен в примере, читайте исходный пост

Добавлено через 36 минут
Цитата:

Сообщение от BlooDHounD (Сообщение 921502)
зачем проводить такие дурацкие "примерные" тесты, если есть нормальный способ?
Код AS3:

trace( getSize( new MovieClip() ) ); // 452
trace( getSize( new Sprite() ) ); // 420
trace( getSize( new Bitmap() ) ); // 248
trace( getSize( new Shape() ) ); // 248

так мы получили разницу 32 байта

потому, что getSize работает только с дебаггером, а кроме того дает разные результаты.
почему - объяснять не буду, человек Вы опытный, должно быть для Вас очевидно.

вот такие результаты я получаю, запустив следующий файл у себя на машине:

Код AS3:

package {
 
        import flash.sampler.*;
        import flash.display.MovieClip;
        import flash.display.Sprite;
        import flash.display.Bitmap;
        import flash.display.Shape;
 
        public class test11 extends MovieClip {
 
                public function test11() {
 
                        trace(getSize(new MovieClip())); // 420
                        trace(getSize(new Sprite())); // 400
                        trace(getSize(new Bitmap())); // 224
                        trace(getSize(new Shape())); // 224
 
                }
 
        }
 
 
}

таким образом мы получаем разницу в 20 байт. Или, как я более точно написал в том посте, который Вы прочли - "порядка 20 байт" в реальной жизни.

BlooDHounD 12.07.2010 12:51

Цитата:

Сообщение от aliim (Сообщение 921512)
ответ приведен как раз после слов "Теперь - зачем?", начиная со следующей строки, читайте исходный пост

там по вашему ответ? там написано как Вам тяжело, и что Вы везде используете мувик, но не написано зачем шахтёрам телескопы.
Цитата:

Сообщение от aliim (Сообщение 921512)
проверял. код приведен в примере, читайте исходный пост

Вы сами этот пример написали? Вы знаете как выглядит повторная загрузка?
Цитата:

Сообщение от aliim (Сообщение 921512)
потому, что getSize работает только с дебаггером, а кроме того дает разные результаты.
почему - объяснять не буду, человек Вы опытный, должно быть для Вас очевидно.

а Вы сами дебагер не используете? и ещё я понятия не имею, почему у меня getSize на 3х компах одинаковый результат выдал. что я делаю не так?

i.o. 12.07.2010 14:00

у меня так:
Код AS3:

trace( getSize( new MovieClip() ) ); // 456
trace( getSize( new Sprite() ) ); // 424
trace( getSize( new Bitmap() ) ); // 248
trace( getSize( new Shape() ) ); // 248


iNils 12.07.2010 14:22

У меня результаты как у Блуда

incoob 12.07.2010 14:24

Цитата:

Сообщение от BlooDHounD (Сообщение 921550)
и ещё я понятия не имею, почему у меня getSize на 3х компах одинаковый результат выдал. что я делаю не так?

Разные версии плеера? ;)

iNils 12.07.2010 14:34

Код:

WIN 9,0,115,0
WIN 9,0,124,0
WIN 9,0,151,0
WIN 9,0,159,0
WIN 9,0,246,0
WIN 9,0,260,0
488 / 456 / 232 / 232

WIN 10,0,12,36
WIN 10,0,22,87
448 / 416 / 248 / 248

WIN 10,0,32,18
WIN 10,0,42,34
WIN 10,0,45,2
452 / 420 / 248 / 248


FlashWizard 12.07.2010 15:04

А чем отличается MovieClip от Sprite?

Добавлено через 1 минуту
И в каких случаях применять лучше Sprite?

Diestro 12.07.2010 15:10

Цитата:

Сообщение от FlashWizard (Сообщение 921613)
А чем отличается MovieClip от Sprite?

Добавлено через 1 минуту
И в каких случаях применять лучше Sprite?

И вот он! Аппофиоз :)

iNils 12.07.2010 15:11

Цитата:

А чем отличается MovieClip от Sprite?
У мувиклипа есть таймлайн.
Но у программно созданного мувиклипа
Код AS3:

var mc:MovieClip = new MovieClip ()

будет всегда один кадр. Поэтому смысла создавать его нет, нужно использовать Sprite.

MovieClip надо использовать только тогда, когда он связывается клипом в библиотеке.

FlashWizard 12.07.2010 15:16

А такие свойства МК, как x, y, width,.... у Sprite есть?

iNils 12.07.2010 15:31

MovieClip унаследован от Sprite и в нем добавлены:

Свойства:
Код AS3:

currentFrame : int
currentFrameLabel : String
currentLabel : String
currentLabels : Array
currentScene : Scene
enabled : Boolean
framesLoaded : int
scenes : Array
totalFrames : int
trackAsMenu : Boolean

Методы
Код AS3:

gotoAndPlay(frame:Object, scene:String  = null):void
gotoAndStop(frame:Object, scene:String = null):void
nextFrame():void
nextScene():void
play():void
prevFrame():void
prevScene():void
stop():void


i.o. 12.07.2010 15:43

проясните пожалуйста зачем МС нужен enabled : Boolean? Вроде как мувиклип не есть кнопка.

Сайлас 12.07.2010 16:22

А что-то я не согласен, что если мне нужен достаточно узкий функционал - типа добавления на сцену нужной картинки, - то лучше использовать шейп вместо битмапа. А то выше было сказано, что битмап используется только в случае обработки изображения?
Цитата:

По-минимуму нужен только Шейп, залитый методом beginBitmapFill(). ... Если планируются операции по обработке изображения - только тогда может понадобиться Битмап (и то необязательно).
В принципе-то получается разницы нет, у них даже методы отличаются тем, что у битмапа битмапдата и сглаживание и снеппинг, а у шейпа есть graphics, который в себя это и включает.
Разные битмапы могут использовать одну битмапдату, при удалении битмапдаты данные и оттуда и оттуда удаляются. Памяти битмап занимает столько же.
В итоге получается, что использования шейпа для просто отрисовки картинки (а не дополнительных возможностей программного рисования), просто напросто медленнее при инициализации. Ведь битмап просто определяется своей битмапдатой, а графику надо программно заполнять, рисовать квадрат по нужному размеру и т.п и т.п.
P.S. Через getTimer() проверил - инициализация шейпа битмапом значительно дольше, раза в 4.

AlexDesinger 12.07.2010 16:23

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

var myTween:Tween;
var myMc:MovieClip;
myMc.myTween=myTween;

просто честно говоря ума не приложу как такое проделать со Sprite.

FlashWizard 12.07.2010 16:26

Ок, спасибо за информацию.

iNils 12.07.2010 16:34

Цитата:

просто честно говоря ума не приложу как такое проделать со Sprite.
Делаете свойство data, и все динамические свойства кладете в Object, который и хранится в data.

Сайлас 12.07.2010 16:34

Цитата:

просто честно говоря ума не приложу как такое проделать со Sprite.
Ну это некрасивое использование динамичности мувиклипа.

Diestro 12.07.2010 16:42

А использовать мувиклип только из-за того что он является динамическим красиво?

Сайлас 12.07.2010 16:48

Цитата:

Сообщение от Diestro (Сообщение 921660)
А использовать мувиклип только из-за того что он является динамическим красиво?

Это мне? Если мне, то вы повторили зачем-то мои слова и спрашиваете у меня?

И вообще хочу лучше про битмап дождаться ответа

AlexDesinger 12.07.2010 17:04

Цитата:

Ну это некрасивое использование динамичности мувиклипа
ну что поделать, если пока альтернативы для себя не нашел, в as2 так было очень удобно, это для меня что-то типа нового свойства мувика.

Цитата:

Делаете свойство data, и все динамические свойства кладете в Object, который и хранится в data.
iNinls, это вот так, например?-
Код AS3:

var mySp:Sprite=new Sprite;
var myTween:Tween;
var myObj:Object=new Object(myTween);
mySp.data=myObj

. ...
о_О ??

Сайлас 12.07.2010 17:17

Я думаю имелось в виду в некотором изменном виде
Код AS3:

public (static) var data:Dictionary;
...
data[mySp] = myTween;


iNils 12.07.2010 17:24

Цитата:

ну что поделать, если пока альтернативы для себя не нашел, в as2 так было очень удобно, это для меня что-то типа нового свойства мувика.
И не найдете, вам нужно менять идеологию. Динамические свойства это плохо и говорит о не продуманности структуры. Динамическими могут быть только данные.
А ваш пример... Вы оперируете классами, спрайт созданный через new Sprite () это чисто вспомогательный элемент, ему не нужны левые свойства, они должны хранится в классе.
Код AS3:

package  {
        import flash.display.Sprite;
        public class Sample extends Sprite {
                public var data:Object = null;
                public function Sample () {
                }
        }
}

Код AS3:

var s:Sample = new Sample ();
s.data = { n:2, s:"test" };
addChild (s);
trace (s.data.n);


AlexDesinger 12.07.2010 17:49

Цитата:

они должны хранится в классе
а-а...точно нужно просто создать "custom sprite" с нужными параметрами, и использовать его везде где нада. Спасибо большое)))

Wolsh 12.07.2010 18:19

Сайлас, Вы видимо ждете ответа про Битмап от меня))
Про существенную разницу по времени отрисовки в битмап и в шейп был не в курсе, это важный момент.
Поскольку не использую ИДЕ, приходится много рисовать программно, т.е. с помощью Graphics, поэтому мне такой подход просто оказался ближе и привычней. Согласен, для галереи Битмап конечно же больше подходит. Если б я делал фотогалереи, наверное выразился бы гораздо мягче.

BlooDHounD 12.07.2010 19:14

вообще передача свойства через левый объект типа мувиклипа, это уже плохая практика. у объекта должны быть только те свойства, которыми пользуется он сам.

AlexDesinger 12.07.2010 19:44

BlooDHounD, это вы про custom property in Sprite/MovieClip?
лично мне так приходилось поступать пару раз чтобы сделать Tween свойством mc, мне так было удобно, потому что была куча mc (теперь я знаю как это сделать с помощью Sprite) у которых было удобно обращаться к их собственному твину, поскольку как только этот объект прекращал движение, нужно было задать новое, изменив анимируемый параметр. Поскольку в Tween храниться сылка на анимируемый объект, таким образом это было очень удобно было делать именно по событию окончания движения.

BlooDHounD 12.07.2010 21:07

AlexDesinger, бррр ... мне бы в голову даже не пришло. но да, "удобно". ничего не скажешь.

AlexDesinger 13.07.2010 10:56

Цитата:

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

BlooDHounD 13.07.2010 11:49

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


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

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