PDA

Просмотр полной версии : Вопрос специалистам! setInterval!!!!


Ингеборга
28.05.2007, 18:27
Добрый день уважаемые профессионалы!
_root.i=0;
pseppp=setInterval (ppp,1000); // Задержка в мс
ppp=_root.createEmptyMovieClip( "test66", 1 );
function ppp()
{
for (i=0; _root.i<200; i++)
{
with ( _root.test66 )
{
lineStyle(1, 0xFF9900, 99-(i/2) );
moveTo (20, 300-i);
lineTo (40, 300-i);
}
}
clearInterval(pseppp);
}

Почему не работает правильным образом setInterval!!!!
Минуя вложенный цикл - выводит результат сразу и из массива for!
Лажа 100%!
Как я только не изголялся - сначала ждёт потом рожает.

Задача такая - нужно из цикла выводить линию, через скажем, цать секунд - следующая и т.п. и т.д.

Спасибо.

etc
28.05.2007, 18:33
Очень мудро перекрывать функцию созданием клипа…

Ингеборга
28.05.2007, 18:41
10 лет назад, так и было...
Как в MDirectore типа:
.....
i++;
}
pause (1000);
}

Kikasso
28.05.2007, 18:42
Клип переименуй или функцию ))

Ингеборга
28.05.2007, 18:44
Так подскажите как в AS - это можно реализовать, пошагово (вычитая из Y) дорисовывать линию, а за ней следующую используя задержку.. Я не понимаю. Встроенный help и 2 библии - ничего не объясняют кроме банальных примеров... с tace - с ним то всё работает.. А в функцию не передаётся значение...test66 из-за того, что я вставляю SetInterval чем trace() - хуже for ( ){}???? Не понимаю как сделать!

Ингеборга
28.05.2007, 18:50
Добавлю чуть-чуть... ещё.
Неужели нельзя было в такой крутой проге как Flash сделать банальную функцию pause(); или delay(); или или... кроме SetGetTime и SetInterval ничего не предлагается.. Кстати, я и for пробывал - такая же фигня.
Вощем резюмиру: минус заграничным автарам создалетям AS (хоть 25ой верссии и хоть встроенную в Фотошоп и куда угодно) - одной простой функции типа delay(112345); Пазор!

BigDan
28.05.2007, 18:52
Задержка:
SI = setInterval(function {clearInterval(SI);},1000);

etc
28.05.2007, 18:55
Ингеборга, ActionScript язык однопоточный, остановить выполнение потока нельзя. Если вам не нравится данный язык — не пишите на нём, вас никто не заставляет этим заниматься. Здесь решают конкретные проблемы, а не высказывают своё недовольство.
Sleep в AS нет, слава богу.

iNils
28.05.2007, 18:58
Позор не знать, что позор пишется через О. И ругать надо прежде всего себя, а не людей (компанию), язык который вы не знаете.

Ингеборга
28.05.2007, 19:00
Ещё кстати, если setInterval внутри for писать или внутри функции выводящей - "висит" как фанера над парижем... По этому, как я понял, портатив пару дней изучения, предназначена она для "перехвата" события функции - если можно так выразится... Фигово дело...

iNils
28.05.2007, 19:02
А цикла вам и не надо. setInterval будет вызывать время от времени функцию, которая рисует линии, а внутри этой функции проверять количество вызывов. И при достижении 200, вызывать clearInterval.

Ингеборга
28.05.2007, 19:03
Язык для анимации - а элементарной задержки нету....

iNils
28.05.2007, 19:04
Язык для анимации - а элементарной задержки нету....Она не нужна.

BigDan
28.05.2007, 19:08
Язык для анимации - а элементарной задержки нету....
я ж тебе написал код елементарной задержки.

Ингеборга
29.05.2007, 11:00
Задержка:
SI = setInterval(function {clearInterval(SI);},1000);
Задумка хороша, но увы - орфографическая ошибка...
Внутри точка с запятой - флеш ругается и падает - в лучшем случае...
Ща попробую прикрутить иначе...

А вообще, господа умы флеша, тут мне один чел подсказал, следующее:
0) В первый: x=0; y=0; xxxx=0;
1) Пишете во второй фрейм скрипт выводящий одну линию (2) - moveTo(x1,y1); - lineTo(x2,y2);
2) В третий (3):

if (x234 && y234 == 300)
{
stop ();
}

esle {
setInterval (xxxx, 1000)
function (xxxx)
{
clearInterval (xxxx);
goToAngPlay (2);
}

Вот. Ну типа так. Получается сцена из 3x кадраффф... frames
Можно "обойти", но обидно конечно что нет банальной функции delay();
А то можно было бы всё на одном фрейме собрать - печально и гиморно..

А прикинте терь сцену из скажем 1000 кадров.. каждый раз так гимороится...

Dr.OH
29.05.2007, 13:25
??? кто-то тормозит... Ингеборга, если ты не умеешь пользоваться AS - это абсолютно не значит, что он плохой.. почему нельзя сделать типа так:

var x:Number = 0;
var y:Number = 0;
var step:Number = 0;
var max_step:Number = 300;
var interval:Number = setInterval(drawFunc, 1000);
function drawFunc():Void {
_root.mc.lineTo(x,y);
x+= 10; y+=10;
_root.mc.lineTo(x,y);
...
_root.mc.endFill();
++step;
if (step>300) clearInterval(interval);
}

вот те все в одном кадре и рисовать будет по одной линии каждую 1000мс... врзможно конечно есть пара ошибок, но я думаю сам исправишь. И delay, кстати, считается самой неудачной функцией во всех языках программирования и све рекоммендуют использовать ее только на начальных стадиях проэктирования программы, так что забудь про нее!!!

Dr.OH
29.05.2007, 13:26
и не надо использоваться setInterval ради создания задержки - это маразм, причем абсолютно нерабочий.

iNils
29.05.2007, 13:35
Ингеборга, вы упорно не жалаете читать, то что вам пишут. Это не флеш не умеет делать то что вы хотите, а вы.
var i:Number = 0;
var limit:Number = 200;
var id:Number = setInterval (this, "drawLine", 10);
var mc:MovieClip = _root.createEmptyMovieClip ("test66", 1);
function drawLine () {
mc.lineStyle (1, 0xFF9900, 99 - (i / 2));
mc.moveTo (20, 300 - i);
mc.lineTo (40, 300 - i);
if (++i == limit) {
clearInterval (id);
}
}По использовать линию в качестве заливки... Делается подобное вот так.
/////////////
import mx.transitions.Tween;
import mx.transitions.easing.None;
import flash.geom.Matrix;
import mx.utils.Delegate;
var mc2:MovieClip = _root.createEmptyMovieClip ("test67", 2);
var matrix:Matrix = new Matrix ();
matrix.createGradientBox (20, 200, -Math.PI / 2, 0, 100);
var tween:Tween = new Tween (this, "y", None.easeNone, 0, 199, 2, true);
tween.onMotionChanged = Delegate.create (this, drawLine2);
function drawLine2 () {
mc2.clear ();
mc2.beginGradientFill ("linear", [0xFF9900, 0xFF9900], [99, 0], [0, 0xFF], matrix);
mc2.moveTo (20, 300);
mc2.lineTo (40, 300);
mc2.lineTo (40, 300 - y);
mc2.lineTo (20, 300 - y);
mc2.lineTo (20, 300);
mc2.endFill ();
}