Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Общие вопросы о Flash (не затрагивающие ActionScript) (http://www.flasher.ru/forum/forumdisplay.php?f=60)
-   -   Появление круга по сектору! (http://www.flasher.ru/forum/showthread.php?t=102604)

Odyssus 17.10.2007 19:57

Появление круга по сектору!
 
Доброго дня, всем!
Хотел спросить, есть ли у кого-то исходник, как маской с помощью MotionTween или ShapeTween сделать, чтобы круг появлялся и исчезал по кругу по секторам?
попробовал Shape делать, но равномерно от центра круга и до конца не получается..

iNils 17.10.2007 20:05

Делается в два прохода.
1. Поворачивается маска (полкруга) и показывает маскируемый слой в котором также лежит полкруга.
2. Тоже самое, только для второй части.

Ostgur 17.10.2007 22:08

Вложений: 1
зачем использовать твины, если можно сделать руками :confused:

iNils 17.10.2007 22:11

Проще менять длительность.

Odyssus 19.10.2007 11:48

2Ostgur так руками и надо, и делал руками!
Для лоадера если делать, ростянуть на 100 фреймов.
Как ты делил на ровные сектора круг?

BLOODnik 19.10.2007 12:02

если делатъ рукими то маску вообще тогда можно не исполъзоватъ)

Ostgur 19.10.2007 14:15

Odyssus, на сектора делил руками, на глаз, всё равно в итоге заметно не очень будет.

Жень Шень 19.10.2007 16:16

Вложений: 1
Цитата:

Сообщение от Odyssus
...Как ты делил на ровные сектора круг?

Матчасть учить надо... хоть изредка.

iNils 19.10.2007 16:38

Я еще раз вопрос повторю. Если вам надо будет изменить длительность анимации, вы опять начнете рисовать сектора руками?

2 Жень Шень: Даже так долгий путь. Лучше не по одному дублировать, а по геометрической прогрессии.

Ostgur 19.10.2007 16:55

iNils, мне лично вообще не нужен этот круговой сектор, загрузка в виде прямоугольника - вот вершина красоты. А Odyssus вряд ли станет менять длительность, сделает 100 кадровый универсал :D

Жень Шень 19.10.2007 18:49

Вложений: 1
Цитата:

Сообщение от iNils
2 Жень Шень: Даже так долгий путь. Лучше не по одному дублировать, а по геометрической прогрессии.

100% согласен. Но! Ответ был дан на реплику:
Цитата:

Сообщение от Odyssus
2Ostgur так руками и надо... Как ты делил на ровные сектора круг?

Так лучше запомнится :yahoo:

Добавлено:
Переделал на быструю руку из 6-го флеша (за синтаксис не бейте)

kruasan 19.10.2007 21:04

Для лоадера не надо ничего рисовать. Есть же готовое решение от Ric Ewing:
http://www.adobe.com/devnet/flash/ar...w_methods.html
В "drawWedge.as" реализована программная отрисовка сектора.

Odyssus 23.10.2007 19:45

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

Извратился, сделал 100 секторов и фреймов соотв. загрузка мне не нравится!!
если поставить картинку большого обьема для проверки, тогда загрузка странно происходит (с большой не мог выложить - форум не позволяет)!
сначала быстро первый круг проматывает и на цифре 1 виснет! потом медленно второй мотает!!

†‡Paladin‡† 23.10.2007 20:38

Распотрошил тут свой старый прелоадер. Зацените мб поможет кому.
Код:

//begin
//customize here
var barRadius = 50;
var barThickness = 20;
var barcolor = 0xFF0000;
var barcolorAlpha = 100;
var textcolor = 0x000000;
var left_text_Preloader = "Loading:      ";
var right_text_preloader = "done";

//Creating mc`s

this.createTextField("label_txt", 3, 0, barHeight, 100, 21);
label_txt.autoSize = "left";
label_txt.selectable = false;

var label_txt_frmt:TextFormat = new TextFormat();
label_txt_frmt.color = textcolor;
label_txt_frmt.size=16;
label_txt_frmt.font='BankGothic Md BT';

this.createEmptyMovieClip("progressbar", 1);
var bar:MovieClip = progressbar.createEmptyMovieClip("bar_mc", 2);
progressbar._x = Stage.width/2-get_text_width()/2;
progressbar._y = Stage.height/2;



//functions and options
MovieClip.prototype.drawWedge = function(x, y, startAngle, arc, radius, yRadius) {
        if (arguments.length<5) {
                return;
        }
        this.moveTo(x, y);
        if (yRadius == undefined) {
                yRadius = radius;
        }
        var segAngle, theta, angle, angleMid, segs, ax, ay, bx, by, cx, cy, dx, dy, ex, ey, fx, fy;
        if (Math.abs(arc)>360) {
                arc = 360;
        }
        segs = Math.ceil(Math.abs(arc)/45);
        segAngle = arc/segs;
        theta = -(segAngle/180)*Math.PI;
        theta1 = (segAngle/180)*Math.PI;
        angle = -(startAngle/180)*Math.PI;
        donutrad = barThickness*2;
        if (segs>0) {
                ax = x+Math.cos(startAngle/180*Math.PI)*radius;
                ay = y+Math.sin(-startAngle/180*Math.PI)*yRadius;
                fx = x+Math.cos(startAngle/180*Math.PI)*(radius-donutrad);
                fy = y+Math.sin(-startAngle/180*Math.PI)*(yRadius-donutrad);
                this.moveTo(fx,fy);
                this.lineTo(ax, ay);
                for (var i = 0; i<segs; i++) {
                        angle += theta;
                        angleMid = angle-(theta/2);
                        bx = x+Math.cos(angle)*radius;
                        by = y+Math.sin(angle)*yRadius;
                        cx = x+Math.cos(angleMid)*(radius/Math.cos(theta/2));
                        cy = y+Math.sin(angleMid)*(yRadius/Math.cos(theta/2));
                        dx = x+Math.cos(angle)*(radius-donutrad);
                        dy = y+Math.sin(angle)*(yRadius-donutrad);
                        ex = x+Math.cos(angleMid)*((radius-donutrad)/Math.cos(theta/2));
                        ey = y+Math.sin(angleMid)*((yRadius-donutrad)/Math.cos(theta/2));
                        this.curveTo(cx, cy, bx, by);
                }
                        this.lineTo(dx, dy);
                for (var j = 0; j<segs; j++) {
                        angle += theta1;
                        angleMid = angle-(theta1/2);
                        dx = x+Math.cos(angle)*(radius-donutrad);
                        dy = y+Math.sin(angle)*(yRadius-donutrad);
                        ex = x+Math.cos(angleMid)*((radius-donutrad)/Math.cos(theta1/2));
                        ey = y+Math.sin(angleMid)*((yRadius-donutrad)/Math.cos(theta1/2));
                        this.curveTo(ex, ey, dx, dy);
                        }
                        this.lineTo(ax,ay);
        }
};

function get_text_width() {
        percents = 99;
        label_txt.text = left_text_Preloader + percents + right_text_preloader;
        label_txt.setTextFormat(label_txt_frmt);
        return a = label_txt._width;
}

label_txt._x = Stage.width/2-get_text_width()/2;
label_txt._y = Stage.height/2;

//main function

function wedge(d_mc, arcVal) {
        d_mc.clear();
        d_mc.lineStyle(0, 0x000000);
        d_mc.beginFill(barcolor, barcolorAlpha);
        d_mc.drawWedge(get_text_width()/2, -barRadius, 0, arcVal, barRadius);
        d_mc.endFill();
}
//
arcVal= 360;

progressbar.onEnterFrame = function() {
    var percents:Number = Math.floor(_root.getBytesLoaded() / _root.getBytesTotal() * 100);
    if (!isNaN(percents)) {
                        wedge(_root.progressbar.bar_mc, percents*3.6);
                                }
        label_txt.text = left_text_Preloader + percents + right_text_preloader;
                label_txt.setTextFormat(label_txt_frmt);
        if (percents >= 100) {
            progressbar.onEnterFrame = undefined;
                        gotoandplay(2);
        }
                if (percents == 100) {
                        progressbar.bar_mc._visible = false;
                        label_txt._visible = false;
                }
    }
//end


Odyssus 23.10.2007 21:38

если не сложно, исходник можна посмотреть?
тут код с мувика и с фрейма написан вместе?

†‡Paladin‡† 23.10.2007 22:03

В 1м кадре этот код. Во втором собстно контент.

kruasan 24.10.2007 05:17

Цитата:

Сообщение от Odyssus
Программная отрисовка, прикольно, а как она свяжется тогда с количеством загруженных байтов?

Есть в функции drawWedge аргумент, соответствующий углу сектора. Угол должен быть равен 360 * bytesLoaded / bytesTotal

Odyssus 24.10.2007 19:16

Еще вопрос: Чего последнее значение загруженных бит равно 98 или 99 процентов?


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

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