Форум 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=194007)

MIHAnik 06.02.2013 12:58

mooncar, чтож пока все понятно. Искренне благодарен)

mooncar 06.02.2013 13:22

Только что обратил внимание на ваши комментарии. В них не совсем все так. Вот как:
Код AS1/AS2:

 
 //передаем аргументом  контейнер-оригинал для отрисовки и глубину (по желанию)
function rasterizeMovieClip(obj, bdLev)
{
        var _par = obj._parent; //получаем ссылку на родителя  оригинального мувика
        var _lev = (bdLev) ? bdLev : _par.getNextHighestDepth(); //если не задали уровень для размещения копии, то вычислим первый свободный уровень у родителя
        var bd_mc = _par.createEmptyMovieClip(obj._name + "BD", _lev); //создаем мувик, куда будем копировать
        var bd = new flash.display.BitmapData(obj._width, obj._height, true, 0x00000000); //создаем экземпляр битмапы
        bd.draw(obj); //отрисовываем в него оригинал, теперь битмапа - это битмапа-слепок
        bd_mc.attachBitmap(bd, bd_mc.getNextHighestDepth()); //в контейнер-копию добавляем битмапу-слепок
        bd_mc._x = obj._x; //выставляем его в тех же координатах
        bd_mc._y = obj._y;
 
      //это важно! если оригинальный мувик не был создан программно, а нарисован руками,
      //то его глубина будет отрицательной, и он не удалится с помощью removeMovieClip
      //поэтому выносим оригинал на первую положительную доступную глубину:
        obj.swapDepths(_par.getNextHighestDepth());
        obj.removeMovieClip(); //.. и оригинал удаляем
}


MIHAnik 06.02.2013 15:01

mooncar, спасибо!!)) теперь все понятно. Единственное не получается сместить результат до того как он будет зафиксирован в bd_mc. У меня получается что отрисовка происходит в углу рабочего стола и появляется обрез краев, пробовал смещать все мувы и родителя, но не помогает.

mooncar 06.02.2013 15:27

Вложений: 1
При отрисовке битмапы из контейнера берется вся графическиая информация справа и вниз от нуля координат, то есть только всё то, что находится на положительных координатах относительно внутреннего нуля координат контейнера. Соответственно все остальное игнорируется (обрезается).
Поэтому при создании мувика следите, чтобы (0, 0) приходился в левый верхний угол, а не в центр (при конвертации объектов в мувик эта точка совпадает с "точкой регистрации").

Вложение 29073

Если уже все сделано, то выделите все объекты внутри контейнера и сдвиньте их вправо и вниз, чтобы (0, 0) осталась в левом верхнем углу.

MIHAnik 06.02.2013 15:38

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

mooncar 06.02.2013 15:52

В общем так - все что нужно делать - это правильно распределять все изначально.
Если нужно что-то анимировать всегда поверх статичного контента - значит под всё это рисовать контейнер (пусть даже пустой начально) и его слой в IDE заранее располагать поверх.
Можно свопить вверх и программно. То есть узнавая первую свободную глубину с помощью getNextHighestDepth() и далее mc.swapDepths(номер_глубины) или с указанием некой конкретной глубины.

MIHAnik 07.02.2013 12:43

Возник такой вопрос. Как мне закинуть bd_mc в другой какой то клип и узнать путь к нему? Изменил строчку на var _par = _root.Lup, новосозданный мув переместился, но я не знаю как к нему обратится. По пути var _root.Lup.bd_mc нет реакции.

mooncar 07.02.2013 12:57

Еще раз. В этой функции ее автор получает, а не задает ссылку на родителя оригинального клипа с помощью выражения:
Код AS1/AS2:

var _par = obj._parent;

А чтобы сделать где-то копию, создавайте там, где нужно var bd_mc .
В данной функции автор хочет, чтобы копия была там же, где и оригинал, поэтому используется _par - ссылка на контейнер, содержащий исходный объект.
Код AS1/AS2:

var bd_mc = _par.createEmptyMovieClip(....);

Вы же можете создавать где угодно:
Код AS1/AS2:

var bd_mc = _root.createEmptyMovieClip("имя_копии", _root.getNextHighestDepth());

Код AS1/AS2:

var bd_mc = _root.путь1.путь2.createEmptyMovieClip("имя_копии", _root.путь1.путь2.getNextHighestDepth());

При этом внутри функции будет существовать bd_mc - ссылка к созданной копии, а вообще обращаться к мувику-копии можно будет
Код AS1/AS2:

_root.путь1.путь2.имя_копии


MIHAnik 07.02.2013 13:03

mooncar, прости)) Я проверял стандартным для себя тестом, перемещением по одной оси. Из за того что запись всегда происходит в одну координату родителя, перемещения не было. Переделал на маску, все заработало. Влюбом случае очень благодарен за таки подробные ответы!))


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

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