Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 08.09.2010, 12:00
In8Finity вне форума Посмотреть профиль Отправить личное сообщение для In8Finity Найти все сообщения от In8Finity
  № 1  
Ответить с цитированием
In8Finity

Регистрация: Jan 2010
Сообщений: 187
Question Как нарисовать сектор круга?

У меня есть задача нарисовать "заполненность" циферблата часов.
Тоесть, по мере того, как секундная стрелка идёт по циферблату, он бы закрашивался цветом.
Во флеше есть инструмент Oval Primitive Tool, который мне идеально подходит.
Там задаётся начальный и конечный угол сектора.

Могу ли я нарисовать программно этот сектор и в зависимости от значения таймера, менять значение угла от 0 до 360 ?
(я нашёл только про рисование кругов и эллипсов. но может вот сектора тоже есть?)

Старый 08.09.2010, 12:12
AS3Coder вне форума Посмотреть профиль Отправить личное сообщение для AS3Coder Найти все сообщения от AS3Coder
  № 2  
Ответить с цитированием
AS3Coder
 
Аватар для AS3Coder

Регистрация: Oct 2009
Адрес: г. Казань
Сообщений: 82
Код AS3:
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();


Последний раз редактировалось AS3Coder; 08.09.2010 в 17:17.
Старый 08.09.2010, 16:01
shaman4d вне форума Посмотреть профиль Отправить личное сообщение для shaman4d Найти все сообщения от shaman4d
  № 3  
Ответить с цитированием
shaman4d
 
Аватар для shaman4d

Регистрация: Jun 2008
Сообщений: 204
Посмотреть как это реализовано в Degrafa

Старый 08.09.2010, 16:52
tsarapkabel вне форума Посмотреть профиль Отправить личное сообщение для tsarapkabel Найти все сообщения от tsarapkabel
  № 4  
Ответить с цитированием
tsarapkabel
 
Аватар для tsarapkabel

Регистрация: Nov 2009
Адрес: в златоглавой
Сообщений: 745
AS3Coder, в твоём примере надо добавить ещё +1 к angle (полкруга получается 181).

Старый 08.09.2010, 17:19
AS3Coder вне форума Посмотреть профиль Отправить личное сообщение для AS3Coder Найти все сообщения от AS3Coder
  № 5  
Ответить с цитированием
AS3Coder
 
Аватар для AS3Coder

Регистрация: Oct 2009
Адрес: г. Казань
Сообщений: 82
Поправил условие выхода из цикла. Должно нарисоваться правильно.

Старый 11.10.2010, 17:56
kutuzov вне форума Посмотреть профиль Отправить личное сообщение для kutuzov Найти все сообщения от kutuzov
  № 6  
Ответить с цитированием
kutuzov
 
Аватар для kutuzov

Регистрация: Jul 2005
Сообщений: 135
дописал код от AS3Coder, прооптимизировал чуть-чуть и добавил возможность задавать внутренний радиус
Код AS3:
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);
			}
		}
	}
 
}
использовать так:
Код AS3:
import utils.drawCircleSector;
const sh:Shape = new Shape();
sh.graphics.beginFill(0xFFFFFF);
drawCircleSector(sh.graphics, 10, 10, 10, 235, 8);
sh.graphics.endFill();
__________________
хоумпага


Последний раз редактировалось kutuzov; 11.10.2010 в 19:27.
Создать новую тему Ответ Часовой пояс GMT +4, время: 20:55.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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