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

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

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

Регистрация: Apr 2007
Сообщений: 53
По умолчанию Как программно разместить ссылки полукругом?

Приветствую.
Подскажите пож-ста, как программно задать расположение _x позиции для каждой ссылки, чтобы они располагались полукругом?

Я делаю так
Код AS1/AS2:
for(j=0; j<total_links;j++){
    var x1:Number = 90;
    var x2:Number = 230;
    var step:Number=(x2-x1)/total_links; //отступ по х
    if (j<total_links/2) {
	end_pos = x2-step*j;
    } else {
	end_pos = x1+step*(j+1);
    }
    mc_arr[j]._x=end_pos; 
}
Ссылки становятся полукругом - но каким то рваным - подскажите нормальную формулу пож-ста.
Изображения
 

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

блогер
Регистрация: Sep 2007
Адрес: Гамбург
Сообщений: 1,648
Записей в блоге: 12
Код AS1/AS2:
var centerX:Number = 150;
var centerY:Number = 150;
var ang:Number = 270;
 
var radius:Number = 100;
 
var step:Number = 30;
 
for(var i:Number = 0; i < 7; i++)
{
	var mc:MovieClip = this.attachMovie("mc", mc + i, i);
	mc._x = centerX + radius * Math.cos(ang * Math.PI / 180);
	mc._y = centerY + radius * Math.sin(ang * Math.PI / 180);
 
	ang += step;
}

Старый 14.10.2009, 18:20
Tochilin вне форума Посмотреть профиль Отправить личное сообщение для Tochilin Найти все сообщения от Tochilin
  № 3  
Ответить с цитированием
Tochilin

Регистрация: Apr 2007
Сообщений: 53
спасибо. Только немного не то. Может вы сможете видоизменить Ваш код, у меня не получается.

Все ссылки, должны быть не по кругу, а по ПОЛУКРУГУ как на рисунке. Нижняя граница "ссылка 8", верхняя - "ссылка 1". Ссыллок может быть больше или меньше - но все они должны вместится в это пространство по высоте (от ссылки 1 до ссылки 8)

Добавлено через 50 секунд
и расстояние по _y между ссылками должно быть одинаковым.

Старый 14.10.2009, 18:29
Волгоградец вне форума Посмотреть профиль Отправить личное сообщение для Волгоградец Найти все сообщения от Волгоградец
  № 4  
Ответить с цитированием
Волгоградец
 
Аватар для Волгоградец

блогер
Регистрация: Sep 2007
Адрес: Гамбург
Сообщений: 1,648
Записей в блоге: 12
В моем примере:
centerX, centerY - координаты центра круга.
ang - начальное положение первого клипа/ссылки в градусах
radius - радиус круга
step - шаг, т.е. расстояние между клипами/ссылками

Вы задаете значение первой ссылки. И знаете сколько их всего - значит найдете положение последней и шаг.

Старый 14.10.2009, 18:56
dimarik вне форума Посмотреть профиль Отправить личное сообщение для dimarik Найти все сообщения от dimarik
  № 5  
Ответить с цитированием
dimarik
.
 
Аватар для dimarik

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
Определите начальный и конечный угол. Разделите его на количество ссылок минус один - это будет приращение.

Например, самая нижняя точка (ссылка 8 на Вашем рисунке) имеет угол (во флешовой системе координат!!) примерно 3/4*PI, а верхняя ссылка - 5/4*PI. Ссылок всего восемь. Имеем дельта фи = (5/4*PI - 3/4*PI) / (8-1);

Вот немного модифицированный код
Код AS1/AS2:
var centerX:Number = 180;
var centerY:Number = 150;
 
var radius:Number = 150;
 
var values:Array = new Array (
	'link 1', 'link 2', 'link 3',
	'link 4', 'link 5', 'link 6'
);
 
var startAngle:Number = 3 / 4 * Math.PI;
var finishAngle:Number = 5 / 4 * Math.PI;
 
var deltaPhi:Number = (this.finishAngle - this.startAngle) / (this.values.length - 1);
 
var textField:TextField;
var step:Number = 0;
 
for(var i:Number = 0; i < values.length; i++) {
	textField = this.createTextField('tf_' + step, step, 0, 0, 40, 18);
	textField.border = true;
	textField._x = centerX + radius * Math.cos(startAngle);
	textField._y = centerY + radius * Math.sin(startAngle);
	textField.text = values[i];
	startAngle += deltaPhi;
	step++;
}
__________________
Воспитан в TimeZero. Работаю в Mail.ru.

Создать новую тему Ответ Часовой пояс GMT +4, время: 06:29.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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