Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   картинка на сцене Shape или Bitmap? (http://www.flasher.ru/forum/showthread.php?t=147253)

AlexDesinger 30.11.2010 12:04

картинка на сцене Shape или Bitmap?
 
Здравствуйте у меня вопрос, если я размещаю картинку на сцене вручную из библиотеки, то простой трейс выводит -
Код AS3:

trace(this.getChildAt(0) //[object Shape])

Но в инспекторе свойств это явно картинка и должна быть либо Bitmap, либо BitmapData.
Как быть в этой ситуации, как найти свойство .bitmapData у картинки, добавленной вручную?

dimarik 30.11.2010 12:29

Отрисуйте его BitmapData#draw().

cleptoman 30.11.2010 12:38

да вопрос то не в этом, а в том, что размещенную картинку на сцене плеер расценивает как шейп. у меня такое было в CS3. я недолго почесал репу и переделал все по другому )

nOobCrafter 30.11.2010 12:40

dimarik зачем? если точка регистрации не 0, 0 а где нить в отрицательной области то при отрисовке будут проблемы.
AlexDesinger при размещении вручную, получается шейп с битмапфил если не ошибаюсь, что бы была битмапа пролинкуйте в либе свою картинку, base class будет, BitmapData, а на сцене будет лежать битмапа.

Hidest 30.11.2010 13:02

При BitamapData # draw() нет никаких проблем, какими бы ни были координаты... матрица трансформации на это дело есть.

nOobCrafter 30.11.2010 13:06

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

AlexDesinger 30.11.2010 13:44

Цитата:

AlexDesinger при размещении вручную, получается шейп с битмапфил если не ошибаюсь, что бы была битмапа пролинкуйте в либе свою картинку, base class будет, BitmapData, а на сцене будет лежать битмапа.
Да, не ошибаетесь, именно шейп с заливкой из битмапфил, я посмотрел, к сожалению у Shape нет возможности достучаться из его битмапфил до битмапы, поэтому сделал линк для картинок. Но еще пришлось насильно приводить к типу Битмап, поскольку as3 упорно считал ее DisplayObject и не находил свойство bitmapData

Цитата:

var up_bm:Bitmap = button_mc.up_mc.getChildAt(0).bitmapData;// Line 29 1119: Access of possibly undefined property bitmapData through a reference with static type flash.display:DisplayObject.
только вот так получилось -
Код AS3:

var up_bm:Bitmap = button_mc.up_mc.getChildAt(0) as Bitmap;
trace(up_bm.bitmapData)//[object up_png]


zuxul 30.11.2010 14:38

Еще один ньюанс с памятью.
При создании такого битмапа, его bitmapData будет создаваться заново из прилинкованной картинки (BitmapData#clone), что не очень хорошо когда нужно, например, создать несколько Bitmap-ов.
Как заставить Flash IDE не дублировать bitmapdate я так и не нашел...

cleptoman 30.11.2010 15:27

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

zuxul 30.11.2010 16:53

cleptoman, а Вы мне объясните, как во Flash IDE юзать одну и ту же битмапдату?

cleptoman 30.11.2010 17:30

конечно )

Код AS3:

var bitmap1:Bitmap = getChildAt(0) as Bitmap;
var bmp:BitmapData = bitmap1.bitmapData;
var bitmap2:Bitmap = new Bitmap(bmp);
addChild(bitmap2);
bitmap2.x                        = 200;
trace(bitmap1.bitmapData === bitmap2.bitmapData); // true

интересную штуку для себя щас открыл как раз в тему: если картинку, размещенную на таймлайне предварительно залинковать к классу, то трэйс getChildAt(0) нам покажет уже Bitmap, а не Shape

nOobCrafter 30.11.2010 17:38

ну я об этом уже написал в 4ом посте, но приведение всеравно надо будет делать.

cleptoman 30.11.2010 17:39

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

Добавлено через 3 минуты
nOobCrafter, ага..я не внимательно прочитал..однако не понял все-таки - почему так )

zuxul 30.11.2010 17:55

Говоря, во Flash IDE, имелось ввиду, не используя кода, только с помощью визуального редактора, может какие-то настройки есть...


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

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