Просмотр полной версии : прорисовка простых геом.фигур "в одну линию"
Доброго вечера уважаемому флеш-сообществу. :drinks:
Зачитывался я тут хелпом на тему "lineStyle" и озадачился таким вопросом:
Почему никто(по-крайней мере я ни разу не видел ни в хелпе ни в сети..) не рисует простые геометрические фигуры, такие как прямоугольник, круг, овал в одну линию? Зачем корячиться, вырисовывая круг, если можно просто нарисовать линию с "длиной=1" и "толщиной=2R"? Есть какие-то подводные камни?
хмэ... эт ты о чем? а то уж больно ответ многозначительный и интригующий..))
Это к тому, что непонятна твоя проза в первом посте.
Ok. Попробую на примере.. Визуально имеем 2 одинаковых круга. 2й код проще.
private function test():Void{
//Рисуем 2 одинаковых круга (R=50)
var mc:MovieClip;
mc=this.createEmptyMovieClip("mc",this.getNextHighestDepth());
//1й вариант
mc.moveTo(200, 100);
mc.beginFill(0x4477AA);
mc.lineStyle(0, 0);
for (var a:Number = 0; a < Math.PI*2;a+=Math.PI/30){
mc.lineTo(Math.cos(a)*50+100, Math.sin(a)*50+100);
}
mc.endFill();
//2й вариант
mc.moveTo(210,100);
mc.lineStyle(102, 0);
mc.lineTo(211,100);
mc.lineStyle(100, 0x4477AA);
mc.lineTo(210,100);
}
Вопрос: почему никто так не рисует?
З.Ы. Про прозрачность, каюсь, загнал лишнего..))
Да я и не претендую на новаторство.)))
Вопрос был в другом: способ корректный? если да, то почему им не пользуются для того чтобы, скажем, прямоугольники рисовать?
А откуда у тебя такая статистика, кто и каким способом пользуется?
Я-же написал: поиск по сайту(ключ.слово "круг")+help - не нашел ничего подобного(либо тригонометрия, либо curveTo) - вот и решил поинтересоваться на всякий случай.
Думаю, топик можно закрывать.:)
Думаю, топик можно закрывать.:)Вроде по этому поводу уже предупреждали?
А вот это видели?
http://flasher.ru/forum/showpost.php?p=606217&postcount=6
PS/ Подводные камни? Попробуйте на ваши круги навесить что-нибудь onPress и покликайте.
2iNils: Нет. Честно заработал плюс за расплывчатое название темы. Про закрытие топиков речи никогда не шло.
2Kikasso: Нет.Спасибо.
2iNils: Нет. Честно заработал плюс за расплывчатое название темы. Про закрытие топиков речи никогда не шло.
http://flasher.ru/forum/showpost.php?p=656953&postcount=5
PS/ Спасибо iNils'у за круглый отрезок, очень веселый способ.
Я не перечитываю свои топики после того как получил ответ.
Приношу извинения за невнимательность и вынужденный флуд.
PS/ Спасибо iNils'у за круглый отрезок, очень веселый способ.
Продолжение. Изврат конечно :D
import flash.display.BitmapData;
import flash.geom.*;
////
function bitmapDrawCircle (radius:Number, color:Number, alpha:Number):BitmapData {
var bmp:BitmapData = new BitmapData (radius + 2, radius + 2, true, 0);
var d:Number = this.getNextHighestDepth ();
var mc:MovieClip = this.createEmptyMovieClip ("mc" + d, d);
var xy:Number = radius / 2 + 1;
mc.lineStyle (radius, color, alpha || 100);
mc.moveTo (xy, xy);
mc.lineTo (xy + .15, xy);
bmp.draw (mc);
mc.removeMovieClip ();
return bmp;
}
function bitmapDrawCircleGradient (radius:Number, fillType:String, colors:Array, alphas:Array, ratios:Array, matrix:Object, spread:String, inter:String, ratio:Number):BitmapData {
var d:Number = this.getNextHighestDepth ();
var mc:MovieClip = this.createEmptyMovieClip ("mc" + d, d);
//// создаем маску
var bmpMaska:BitmapData = new BitmapData (radius + 2, radius + 2, false, 0);
var xy:Number = radius / 2 + 1;
mc.lineStyle (radius, 0xFFFFFF);
mc.moveTo (xy, xy);
mc.lineTo (xy + .15, xy);
bmpMaska.draw (mc);
mc.clear ();
//// создаем градиент
var bmp:BitmapData = new BitmapData (radius + 2, radius + 2, true, 0);
mc.beginGradientFill (fillType, colors, alphas, ratios, matrix, spread, inter, ratio);
mc.moveTo (1, 1);
mc.lineTo (1, radius + 1);
mc.lineTo (radius + 1, radius + 1);
mc.lineTo (radius + 1, 1);
mc.lineTo (1, 1);
mc.endFill ();
bmp.draw (mc);
mc.removeMovieClip ();
bmp.copyChannel (bmpMaska, bmpMaska.rectangle, new Point (0, 0), 1, 8);
return bmp;
}
/////
var mc0:MovieClip = this.createEmptyMovieClip ("mc0", 0);
var bmp0:BitmapData = bitmapDrawCircle (75, 0xFF0000, 75);
mc0.attachBitmap (bmp0, 0);
mc0._x = mc0._y = 100;
////
var mc1:MovieClip = this.createEmptyMovieClip ("mc1", 1);
colors = [0xFF0000, 0x0000FF];
fillType = "radial";
alphas = [100, 100];
ratios = [0, 0xFF];
spreadMethod = "reflect";
interpolationMethod = "linearRGB";
focalPointRatio = 0.9;
var matrix:Matrix = new Matrix ();
matrix.createGradientBox (75, 75, Math.PI, 0, 0);
var bmp1:BitmapData = bitmapDrawCircleGradient (75, fillType, colors, alphas, ratios, matrix, spreadMethod, interpolationMethod, focalPointRatio);
mc1.attachBitmap (bmp1, 0);
mc1._x = mc1._y = 200;
Это не изврат, это уже способ. Очень познавательно.
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.