|
|
|||||
Регистрация: Jan 2010
Сообщений: 187
|
Как нарисовать сектор круга?
У меня есть задача нарисовать "заполненность" циферблата часов.
Тоесть, по мере того, как секундная стрелка идёт по циферблату, он бы закрашивался цветом. Во флеше есть инструмент Oval Primitive Tool, который мне идеально подходит. Там задаётся начальный и конечный угол сектора. Могу ли я нарисовать программно этот сектор и в зависимости от значения таймера, менять значение угла от 0 до 360 ? (я нашёл только про рисование кругов и эллипсов. но может вот сектора тоже есть?) |
|
|||||
Регистрация: Oct 2009
Адрес: г. Казань
Сообщений: 82
|
var center:Point = new Point(100,100); var angle:Number = 45; var radius:Number = 50; // graphics.lineStyle(2, 0x666666); graphics.beginFill(0x999999); graphics.moveTo(center.x, center.y); // for (var i:int = 0, poi:Point; i <= angle; i++) { poi = Point.polar(radius, i * Math.PI/180 - Math.PI*.5); graphics.lineTo(center.x + poi.x, center.y + poi.y); } // graphics.endFill();
__________________
AS3Coding: ActionScript 3.0, FlashDevelop, ... Последний раз редактировалось AS3Coder; 08.09.2010 в 17:17. |
|
|||||
Регистрация: Jun 2008
Сообщений: 204
|
Посмотреть как это реализовано в Degrafa
|
|
|||||
Регистрация: Nov 2009
Адрес: в златоглавой
Сообщений: 745
|
AS3Coder, в твоём примере надо добавить ещё +1 к angle (полкруга получается 181).
|
|
|||||
Регистрация: Oct 2009
Адрес: г. Казань
Сообщений: 82
|
Поправил условие выхода из цикла. Должно нарисоваться правильно.
__________________
AS3Coding: ActionScript 3.0, FlashDevelop, ... |
|
|||||
Регистрация: Jul 2005
Сообщений: 135
|
дописал код от AS3Coder, прооптимизировал чуть-чуть и добавил возможность задавать внутренний радиус
package utils { import flash.display.Graphics; import flash.geom.Point; public function drawCircleSector(g:Graphics, centerX:Number, centerY:Number, radius:Number, angle:Number, innerRadius:Number = 0):void { var p:Point, i:uint; const rad:Number = Math.PI / 180; const pi2:Number = Math.PI / 2; g.moveTo(centerX, 0); for (i=0; i<=angle; ++i) { p = Point.polar(radius, i * rad - pi2); g.lineTo(centerX + p.x, centerY + p.y); } if (innerRadius != 0 && innerRadius < radius) { for (i=angle; i>=0; --i) { p = Point.polar(innerRadius, i * rad - pi2); g.lineTo(centerX + p.x, centerY + p.y); } } } }
__________________
хоумпага Последний раз редактировалось kutuzov; 11.10.2010 в 19:27. |
Часовой пояс GMT +4, время: 15:59. |
|
« Предыдущая тема | Следующая тема » |
Опции темы | |
Опции просмотра | |
|
|