Форум 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)
-   -   setInterval - не умею использовать :( (http://www.flasher.ru/forum/showthread.php?t=114073)

Чттос 17.07.2008 17:28

setInterval - не умею использовать :(
 
Ребята, помогите пожалуйста! Сколько раз сталкивалась с 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");

Спасибо заранее :)

Волгоградец 17.07.2008 18:43

Код:

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);
                }
        }
}

Использовать:
Код:

var a:LaCourbe = new LaCourbe (_root);

Чттос 17.07.2008 19:51

Спасибо огромное! все работает, но всеравно выдает две ошибки, в которых я ничего не понимаю, тк с классами никогда не сталкивалась. только последнее время, начала встречать их на форуме =8-0
понятно только одно, что щас буду с ними разбираться. Случаем нет никакой хорошей документации по классам на русском языке?? а пока я полезла в хэлп....

О ужас! Да-да, я просто щас в ужасе! разобралась я с классами, что к чему в общем виде. и что? оказывается что я даже не умею прикреплять к своей флэшке файл .asc!!! =8-0

Отсюда вопрос: а нельзя ли это все организовать все же в едином файле? просто допустим, что если мне надо несколько раз вызвать эту функцию, LaCourbe, с разными параметрами???

Alex_beginner 17.07.2008 22:01

Вложений: 1
Предлагаю мой вариант реализации:

Код:

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 вынесена в отдельную функцию.

crazyone 18.07.2008 12:03

Цитата:

оказывается что я даже не умею прикреплять к своей флэшке файл .asc!!! =8-0
Его прикреплять не надо.
Надо положить его рядом с вашей флешкой, а в флешке написать
Код:

import LaCourbe;
var a:LaCourbe = new LaCourbe (_root);



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

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