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

Guelder 14.11.2006 17:24

По поводу маски
 
Я хочу из прямоугольника вырезать центр, чтобы получилась рамка. Мне интересно, как это можно сделать? Логично было бы предположить, что можно в прямоугольник вписать еще один прямоугольник, поменьше, назначить его маской и.. как бы инвертировать, чтоли, если это возможно. Мне думается, что возможно, только я не знаю как...

BJV 14.11.2006 18:09

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

Guelder 14.11.2006 18:13

Мне программно все это сделать надо. Прямоугольник нарисовать ручками проблемы не вызывает :)

DarkLight 14.11.2006 19:00

Проще программно нарисовать рамку

Guelder 14.11.2006 19:03

Удивительно, как до 8-й версии не реализовали такую простую вещь, как инвертирование маски - она везде есть. Чтобы заданная область не показывалась, а скрывалась. По-моему это очевидно нужная возможность

Wolsh 14.11.2006 23:29

Ну уж если ты в восьмерке делаешь, так и используй blend'ы.
А ругать гениальных разработчиков всяк горазд, кто хоть десять строк кода написал в своей жизни :) Просто инструменты гораздо более общее применение имеют, а на каждую конкретную задачу свой метод создавать - шибко жирно компиллятор будет весить :)
Код:

// создаем контейнер
_root.createEmptyMovieClip("obadva_mc",1);
obadva_mc.createEmptyMovieClip("ramka_mc",1);
// рисуем внешний прямоугольник
with(obadva_mc.ramka_mc){
beginFill(0xFF0000); moveTo(10, 10);
lineTo(400, 10); lineTo(400, 300);
lineTo(10, 300); lineTo(10, 10);
endFill();
}
obadva_mc.createEmptyMovieClip("mask_mc",5);
// рисуем внутренний прямоугольник
with(obadva_mc.mask_mc){
beginFill(0xFFFF00); moveTo(30, 30);
lineTo(380, 30); lineTo(380, 280);
lineTo(30, 280); lineTo(30, 30);
endFill();
}
// назначаем режим наложения
obadva_mc.blendMode = 2   
obadva_mc.mask_mc.blendMode = 11
// регулируем прозрачность дырки
obadva_mc.mask_mc._alpha = 50

Одна проблема - альфа дырки не может быть 0, должна быть хотябы 1%.
Но это незаметно.

DarkLight 14.11.2006 23:55

Код:

function drawRect(mc:MovieClip, a:Number, b:Number):Void {
        mc.moveTo(a, a);
        mc.lineTo(b, a);
        mc.lineTo(b, b);
        mc.lineTo(a, b);
        mc.lineTo(a, a);
}
function drawBorder(mc:MovieClip):Void {
        mc.beginFill(0);
        mc.lineStyle(1, 0);
        drawRect(mc, 0, 100);
        drawRect(mc, 10, 90);
        mc.endFill();
}
_root.createEmptyMovieClip("brd", 1);
brd._x = 100;
brd._y = 100;
drawBorder(brd);


DarkLight 14.11.2006 23:59

Или вообще так

Код:

function drawRect(mc:MovieClip, a:Number, b:Number):Void {
        //Изменение последнего параметра lineStyle
        //позволит срезать или скруглить углы рамки
        mc.lineStyle(10, 0, 100, false, "normal", "square", "miter");
        mc.moveTo(a, a);
        mc.lineTo(b, a);
        mc.lineTo(b, b);
        mc.lineTo(a, b);
        mc.lineTo(a, a);
}
_root.createEmptyMovieClip("a", 1);
drawRect(a, 0, 100);



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

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