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

Tochilin 14.10.2009 17:30

Как программно разместить ссылки полукругом?
 
Вложений: 1
Приветствую.
Подскажите пож-ста, как программно задать расположение _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

Код 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;
}


Tochilin 14.10.2009 18:20

спасибо. Только немного не то. Может вы сможете видоизменить Ваш код, у меня не получается.

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

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

Волгоградец 14.10.2009 18:29

В моем примере:
centerX, centerY - координаты центра круга.
ang - начальное положение первого клипа/ссылки в градусах
radius - радиус круга
step - шаг, т.е. расстояние между клипами/ссылками

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

dimarik 14.10.2009 18:56

Определите начальный и конечный угол. Разделите его на количество ссылок минус один - это будет приращение.

Например, самая нижняя точка (ссылка 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++;
}



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

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