Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   как в Bitmap'е отрисовать MovieClip, находящийся в библиотеке? (http://www.flasher.ru/forum/showthread.php?t=114446)

Peregrin 29.07.2008 16:44

как в Bitmap'е отрисовать MovieClip, находящийся в библиотеке?
 
я знаю как загнать картинку из библиотеки в Bitmap, но загнать MovieClip чето не получается. Подскажите

litebox 29.07.2008 16:54

1. Создаете экземпляр класса вашего MovieClip.
2. Рисуете его на BitmapData методом draw.
3. Создаете экземпляр класса Bitmap(ВАША BitmapData) - получаете DisplayObject.

Peregrin 29.07.2008 17:00

да про это я знаю. Мне интересно нельзя все это сделать без создания экземпляра?

litebox 29.07.2008 17:07

думаю нет... можно для созданного MovieClip указать свойство cacheAsBitmap = true... если вы используете Bitmap для повышения производительности, то этот вариант тоже хорош, если изображение не поворачивать и не скейлить

Peregrin 29.07.2008 18:17

тут еще такая проблема:
клип, к которому я применяю метод draw(), т.е. который я хочу отрисовать, имеет точку регистра снизу в центре. Так вот... когда я применяю метод draw(), то в результате в Bitmap'е ничего не отображается. Но стоит мне переместить точку регистра в левый-верхний угол, как все становится нормально, но такой вариант меня не устраивает. Пробовал в метод draw() передать параметр clipRect, область которого покрывает весь клип, но тоже ничего не происходит. В чем дело?

litebox 29.07.2008 18:42

Дело в матрице преобразований:
Код:

var matrix: Matrix = new Matrix();
                       
matrix.translate(СМЕЩЕНИЕ, СМЕЩЕНИЕ);

var bitmapData: BitmapData = new BitmapData(SIZE, SIZE);
                         
bitmapData.draw(mcClip, matrix);


Peregrin 29.07.2008 18:57

че то я не понял эту систему. Я сделал смещение, но все равно Bitmap не отображает ничего, что находится выше или левее точки

iNils 29.07.2008 19:11

Код:

import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.geom.*;

//// создаем клип со смещенным центром в правый нижний угол
var mc:MovieClip = new MovieClip ();
var g:Graphics = mc.graphics;
g.beginFill (0xFF0000);
g.lineTo(-100,0)
g.lineTo(-100,-100)
g.lineTo(0,-100)
g.lineTo(0,0)
g.endFill()
this.addChild (mc)
mc.x = 200;
mc.y = 200;

//// создаем обычный битмап
var bmpd:BitmapData = new BitmapData (100,100, false, 0x0000FF);
bmpd.draw (mc);
var bmp:Bitmap = new Bitmap (bmpd);
this.addChild (bmp);
bmp.x = 250;
bmp.y = 100; //// пусто

//// создаем битмап с матрицей смещения
var bmpd2:BitmapData = new BitmapData (100,100, false, 0x0000FF);
var matrix:Matrix = new Matrix ();
matrix.translate (100, 100);
bmpd2.draw (mc, matrix);
var bmp2:Bitmap = new Bitmap (bmpd2);
this.addChild (bmp2);
bmp2.x = 400;
bmp2.y = 100; //// готово


Venya2007 29.07.2008 19:14

Код:

var m:M= new M();
var bmp:BitmapData = new BitmapData(m.width,m.height,false,0x00FF00);
bmp.draw(m,new Matrix(1,0,0,1,m.width/2,m.height/2))
var b:Bitmap = new Bitmap(bmp)
b.x=100;
b.y=100
addChild(b)

где М - класс вашего мувика

iNils - у меня еще проще :)

Peregrin.ru - просто скопируйте код :), только вместо М поставте клас вашего мувика.

Peregrin 30.07.2008 11:54

Цитата:

Сообщение от Venya2007 (Сообщение 755128)
iNils - у меня еще проще :)

У тебя не проще, просто у тебя конкретно под мой пример, а у него общий, с нуля, так сказать ))

Спасибо всем у меня не работало оказывается потому, что я параметры смещения в команде translate() указывал со знаком минус. А щас все работает. Еще раз спасибо


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

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