Просмотр полной версии : Появление круга по сектору!
Доброго дня, всем!
Хотел спросить, есть ли у кого-то исходник, как маской с помощью MotionTween или ShapeTween сделать, чтобы круг появлялся и исчезал по кругу по секторам?
попробовал Shape делать, но равномерно от центра круга и до конца не получается..
Делается в два прохода.
1. Поворачивается маска (полкруга) и показывает маскируемый слой в котором также лежит полкруга.
2. Тоже самое, только для второй части.
зачем использовать твины, если можно сделать руками :confused:
Проще менять длительность.
2Ostgur так руками и надо, и делал руками!
Для лоадера если делать, ростянуть на 100 фреймов.
Как ты делил на ровные сектора круг?
BLOODnik
19.10.2007, 12:02
если делатъ рукими то маску вообще тогда можно не исполъзоватъ)
Odyssus, на сектора делил руками, на глаз, всё равно в итоге заметно не очень будет.
Жень Шень
19.10.2007, 16:16
...Как ты делил на ровные сектора круг?
Матчасть учить надо... хоть изредка.
Я еще раз вопрос повторю. Если вам надо будет изменить длительность анимации, вы опять начнете рисовать сектора руками?
2 Жень Шень: Даже так долгий путь. Лучше не по одному дублировать, а по геометрической прогрессии.
iNils, мне лично вообще не нужен этот круговой сектор, загрузка в виде прямоугольника - вот вершина красоты. А Odyssus вряд ли станет менять длительность, сделает 100 кадровый универсал :D
Жень Шень
19.10.2007, 18:49
2 Жень Шень: Даже так долгий путь. Лучше не по одному дублировать, а по геометрической прогрессии.
100% согласен. Но! Ответ был дан на реплику:
2Ostgur так руками и надо... Как ты делил на ровные сектора круг?
Так лучше запомнится :yahoo:
Добавлено:
Переделал на быструю руку из 6-го флеша (за синтаксис не бейте)
Для лоадера не надо ничего рисовать. Есть же готовое решение от Ric Ewing:
http://www.adobe.com/devnet/flash/articles/adv_draw_methods.html
В "drawWedge.as" реализована программная отрисовка сектора.
Программная отрисовка, прикольно, а как она свяжется тогда с количеством загруженных байтов? Вручную - так там переход на определенный кадр.
Извратился, сделал 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
если не сложно, исходник можна посмотреть?
тут код с мувика и с фрейма написан вместе?
†‡Paladin‡†
23.10.2007, 22:03
В 1м кадре этот код. Во втором собстно контент.
Программная отрисовка, прикольно, а как она свяжется тогда с количеством загруженных байтов?
Есть в функции drawWedge аргумент, соответствующий углу сектора. Угол должен быть равен 360 * bytesLoaded / bytesTotal
Еще вопрос: Чего последнее значение загруженных бит равно 98 или 99 процентов?
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.