Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   BitmapData::draw(clip) - отрисовать "минусовую" часть clip (http://www.flasher.ru/forum/showthread.php?t=174398)

HardCoder 24.01.2012 14:33

BitmapData::draw(clip) - отрисовать "минусовую" часть clip
 
Здравствуйте, мучает вопрос. Есть некий спрайт. В нем нарисован прямоугольник (-100, -100, 200, 200). Хочу этот квадрат отрисовать в битмап (200х200). Но дело в том что отрисовывается лишь четвертая часть - та котороя находится в "плюсовой" части спрайта, а все что находится в минусе - не попадает в битмап. Ну - это оно логично. Но как все-таки отрисовать весь квадрат? Параметр clipRect метода draw не подходит - проверял. Если clipRect задать (-100, -100, 200, 200) - все равно отрисовывается лишь четвертая часть :eek:. Подскажите, пожалуйста, как можно решить эту задачу.

Добавлено через 2 минуты
PS: Я делаю это таким способом: помещаю спрайт квадрата в другой спрайт (на положительную область), и отрисовываю его. Но кажеться мне - это немного извращенно. Нет ли более изящных способов?

GBee 24.01.2012 14:37

А матрицу не пробовали?

silin 24.01.2012 14:43

Код AS3:

var sprite:Sprite = new Sprite();
sprite.graphics.beginFill(0x808080);
sprite.graphics.drawRect( -100, -100, 200, 200);
 
var bounds:Rectangle = sprite.getBounds(sprite);
var mtrx:Matrix = new Matrix();
mtrx.translate(bounds.left, bounds.top);
var bmd:BitmapData = new BitmapData(bounds.width, bounds.height);
bmd.draw(sprite, mtrx);
addChild(new Bitmap(bmd));


HardCoder 24.01.2012 15:29

Спасибо товарищи, за советы. silin, так оно не малюет ничего. Я изменил:
Код AS3:

mtrx.translate(bounds.left, bounds.top);

на
Код AS3:

mtrx.translate(Math.abs(bounds.left), Math.abs(bounds.top));

, тогда намалевало :)

crazyone 24.01.2012 15:32

а надо было поменять на
Код AS3:

mtrx.translate(-bounds.left,-bounds.top);


silin 24.01.2012 15:32

дада, сори
только лучше наверное
Код AS3:

mtrx.translate(-bounds.left, -bounds.top);


HardCoder 24.01.2012 15:44

Цитата:

Сообщение от silin (Сообщение 1058843)
только лучше наверное
Цитата:

Сообщение от crazyone (Сообщение 1058842)
mtrx.translate(-bounds.left,-bounds.top);


Ну, раз уж опытные сказали - значит так и сделаю. Только вопрос: чем лучше? Быстрее что ли?

silin 24.01.2012 15:47

лучше тем, что если контент будет смещен в другую сторону, то тоже сработает, а с abs нет

HardCoder 24.01.2012 15:54

Понял, буду иметь в виду. Спасибо всем за внимание.


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

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