![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Ребята, помогите пожалуйста! Сколько раз сталкивалась с setInterval, ни разу не получалось с ним разобраться. обходилась в итоге другими способами. но сейчас даже не представляю как можно иначе реализовать следующую вещь:
у меня есть код, который чертит кривую по заданной функции. в моем случае - парабола. я ее черчу создавая в клипе container дочерние клипы nameMC. от каждого нового nameMC черчу линию к старому nameMC, тем самым создавая траекторию. При компиляции на экране появляется нужная кривая. Но мне надо что б каждый дочерний клип, nameMC, появлялся после какого-то промежутка времени. То есть, будет эффект анимации. Для этого я пыталась использовать setInterval, разными способами, но в итоге ничего не вышло. вообще. ![]() Подскажите пожалуйста, куда его надо вставлять в этот код: var cooX1:Number;
var cooX2:Number;
var cooY1:Number;
var cooY2:Number;
var i:Number = 0;
var nameMC;
var container:MovieClip;
function laCourbe(a:Number, b:Number, c:Number, courbeColor:String) {
for (cooX1=100; cooX1<300; cooX1 += 1) {
container = this.createEmptyMovieClip("container", this.getNextHighestDepth());
cooY1 = a*Math.pow(cooX1, 2)+b*cooX1+c;
nameMC = "point"+i;
container.createEmptyMovieClip(nameMC,this.getNextHighestDepth());
container[nameMC]._x = cooX1;
container[nameMC]._y = cooY1;
container[nameMC].lineStyle(1,courbeColor,100);
var cooRazX:Number = cooX2-cooX1;
var cooRazY:Number = cooY2-cooY1;
container[nameMC].lineTo(cooRazX,cooRazY);
cooX2 = cooX1;
cooY2 = cooY1;
i++;
}
cooX2 = null;
cooY2 = null;
}
laCourbe(0.05,-20,2050,"0xFF0000");
![]()
__________________
ЧунГачГучинА-а! |
|
|||||
class LaCourbe {
private var cooX1:Number = 100;
private var cooX2:Number;
private var cooY1:Number;
private var cooY2:Number;
private var i:Number = 0;
private var nameMC;
private var container:MovieClip;
private var id:Number;
public function LaCourbe (mc:MovieClip)
{
container = mc.createEmptyMovieClip("container", mc.getNextHighestDepth());
id = setInterval(this, "laCourbe", 10, 0.05,-20,2050,"0xFF0000");
}
private function laCourbe(a:Number, b:Number, c:Number, courbeColor:String) {
cooY1 = a*Math.pow(cooX1, 2)+b*cooX1+c;
nameMC = "point"+i;
container.createEmptyMovieClip(nameMC, container.getNextHighestDepth());
container[nameMC]._x = cooX1;
container[nameMC]._y = cooY1;
container[nameMC].lineStyle(1,courbeColor,100);
var cooRazX:Number = cooX2-cooX1;
var cooRazY:Number = cooY2-cooY1;
container[nameMC].lineTo(cooRazX,cooRazY);
cooX2 = cooX1;
cooY2 = cooY1;
i++;
cooX1 ++
if (cooX1 >= 300)
{
clearInterval (id);
}
}
}
|
|
|||||
|
Спасибо огромное! все работает, но всеравно выдает две ошибки, в которых я ничего не понимаю, тк с классами никогда не сталкивалась. только последнее время, начала встречать их на форуме =8-0
понятно только одно, что щас буду с ними разбираться. Случаем нет никакой хорошей документации по классам на русском языке?? а пока я полезла в хэлп.... О ужас! Да-да, я просто щас в ужасе! разобралась я с классами, что к чему в общем виде. и что? оказывается что я даже не умею прикреплять к своей флэшке файл .asc!!! =8-0 Отсюда вопрос: а нельзя ли это все организовать все же в едином файле? просто допустим, что если мне надо несколько раз вызвать эту функцию, LaCourbe, с разными параметрами???
__________________
ЧунГачГучинА-а! Последний раз редактировалось Чттос; 17.07.2008 в 20:06. |
|
|||||
|
Регистрация: May 2008
Сообщений: 476
|
Предлагаю мой вариант реализации:
import flash.geom.Point;
var cooY1:Number = null; //координата Y точек
var cooX1:Number = null; //координата X точек
var i:Number = 0;//индекс имени клипов-точек
var nameMC:String = '';//имя клипа-точек
var beg_X:Number = 110;//начальный X построения кривой
var end_X:Number = 210;//конечный X построения кривой
var step:Number = 5; // шаг по X
var timePeriod:Number = 80; //временной период между прорисовками точек
var intervalID:Number = null;//идентификатор таймера
function laCourbe(a:Number, b:Number, c:Number, courbeColor:Number) {
var container:MovieClip = this.createEmptyMovieClip("container", this.getNextHighestDepth());
var beg_Point:Point = equation_of_curve(beg_X,a,b,c);
container.moveTo(beg_Point.x,beg_Point.y);
cooX1=beg_X+step;
intervalID = setInterval(constrFunc,timePeriod,a,b,c,courbeColor);
}
function equation_of_curve(X:Number, a:Number, b:Number, c:Number):Point //функция изменения Y от X
{
return new Point(X,a*Math.pow(X, 2)+b*X+c);
}
function constrFunc(a:Number, b:Number, c:Number, courbeColor:Number)
{
cooY1 = equation_of_curve(cooX1,a,b,c).y;
nameMC = "point"+i;
//container.createEmptyMovieClip(nameMC,container.getNextHighestDepth());
container.attachMovie("point",nameMC,container.getNextHighestDepth());
container[nameMC]._x = cooX1;
container[nameMC]._y = cooY1;
container.lineStyle(1,courbeColor);
container.lineTo(cooX1,cooY1);
if (cooX1>end_X)
{
clearInterval(intervalID);
trace("Построение окончено");
}
i++;
cooX1+=step;
}
laCourbe(0.05,-20,2050,0xFF0000);
1. работоспособность (линии отображены цветом courbeColor); 2. отсутствует или почти отсутствует избыточность кода, т.е нет излишних вычитаний, сложений, присвоений, инкрементов. 3. структурированность кода - математическая функция задающая закон изменения Y от X вынесена в отдельную функцию.
__________________
Случайность, господа, это знаете ли непознанная необходимость. Последний раз редактировалось Alex_beginner; 18.07.2008 в 12:59. |
|
|||||
|
Цитата:
Надо положить его рядом с вашей флешкой, а в флешке написать |
![]() |
![]() |
Часовой пояс GMT +4, время: 21:46. |
|
|
« Предыдущая тема | Следующая тема » |
| Теги |
| setinterval |
|
|