Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript (http://www.flasher.ru/forum/forumdisplay.php?f=5)
-   -   Как организовать задержку? (http://www.flasher.ru/forum/showthread.php?t=49637)

TwoKey 28.09.2003 06:20

Как организовать задержку?
 
Как организовать задержку при помощи action script? т.е. выполняется скрипт потом задержка к примеру 100 мс и потом скрипт продолжает выполнятся? :confused:

Dimonius 28.09.2003 07:02

setInterval(function(),100);

Пушистик 28.09.2003 10:46

а еще можно вот так:
setInterval(function(){myFunction()},100);

типа:

Код:

function myFunction() {
    trace("Test!!!");
}
setInterval(function () { myFunction()}, 100);


iLoveYou 28.09.2003 11:14

Цитата:

Оригинал написал(а) Пушистик
а еще можно вот так:
setInterval(function(){myFunction()},100);
типа:
Код:

function myFunction() {
    trace("Test!!!");
}
setInterval(function () { myFunction()}, 100);


я, конечно, понимаю, что ты щас опять скажешь "зато у меня работает!", но вышенаписанное - весьма бредовый совет в контексте вопроса, естественно.

iLoveYou 28.09.2003 12:34

я бы предложил нечто подобное:
Код:

var id;
var i = 0;
function f1() {trace("f1");}
function f2() {trace("f2");}
function f3() {trace("f3");}
f_arr = [f1, f2, f3];
function callFunction(num) {
        f_arr[num]();
}
function setArg() {
        callFunction(i);
        i++;
        if (i == f_arr.length) {
                clearInterval(id);
        }
}
id = setInterval(setArg, 1000);

при желании этот принцип можно применить для любого количества кусков кода с произвольными по длительности паузами между их выполнением.

TwoKey 28.09.2003 17:26

Спасибо ребята. Это то понятно, но я хотел узнать как организовать задержку непосредсвенно, т.е. не между вызовами функции. Например я выполняю цикл в котором смещаю объект, и я его хочу смещать плавно, с заданнной скоростью, которую то и можно регулировать при помоши задержки.

iLoveYou 28.09.2003 17:34

Цитата:

Например я выполняю цикл в котором смещаю объект, и я его хочу смещать плавно, с заданнной скоростью, которую то и можно регулировать при помоши задержки.
а есть историческая необходимость выполнять перемещение объекта именно с использованием циклов?

Пушистик 28.09.2003 19:54

Вложений: 1
TwoKey, мож тебе надо простое програмное движение?
тада используй обработчик onEnterFrame....

это с шагом в пиксель:

Код:

onClipEvent (enterFrame) {
    ++_x;
}

это с определенным шагом:

Код:

onClipEvent (load) {
    speed = 10;
}
onClipEvent (enterFrame) {
    _x+=speed;
}

это коды вешаются на сам клип....

если как ты хочет, то я думаю так:

Код:

// скорость движения
speed = 5;
// задержка между шагами
delay = 1000;
function mx() {
    _root.mc._x+=speed;
}
setInterval(function(){mx()},delay);

см. аттач

iLoveYou 28.09.2003 20:00

setInterval(function(){mx()},delay);
объясни, пожалуйста, почему именно такая запись?

Штрек 28.09.2003 21:40

Потому, что
setInterval(mx(),delay); не работает,
хотя в HELP-е /и в контентной подсказке/ стоит
просто имя функции.
Методом тыка натыкал
setInterval(function(){mx()},delay);
Метод оъекта, как у тебя, тоже конечно проходит.

sergwizard 28.09.2003 23:31

2 Штрек
Вообще-то, проще (и правильнее) писать так:
setInterval(mx,delay);

2 Sergey"iLoveYou"
А вот зачем ты тянешь в Action Script привычки из Pascal?
var id;
Это зачем?
Кстати, у Штрека я тоже наблюдал эту беду.

Штрек 29.09.2003 00:21

Цитата:

Оригинал написал(а) sergwizard
2 Штрек
Вообще-то, проще (и правильнее) писать так:
setInterval(mx,delay);
.

Правильно, не правильно - НЕ РАБОТАЕТ.
А вот
setInterval(function(){mx()},delay); - РАБОТАЕТ.

sergwizard 29.09.2003 01:05

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

Правильно, не правильно - НЕ РАБОТАЕТ.
Ну что ж, давай посмотрим на пример. Это один из файлов Пушистика. И, если это НЕ РАБОТАЕТ, то я – бульдозер.

Штрек 29.09.2003 03:57

Ты конечно не бульдозер, потому, что всё работает.
Чего то меня перемкнуло, но помню были у меня проблы с таким вариантом, были. :confused: Тут форум глючит,
так что про людёв говорить.

TwoKey 29.09.2003 06:21

Ну хорошо, а как сделать чтобы прямая линия плавно увеличивалась? т.е. как будто кто-то ведет карандаш по линейке.

Dimonius 29.09.2003 13:23

Вложений: 1
Вот лови примерчик.
Код немного грязноват, потому что это часть большой презентации, от которой я выдрал два кадра.
Но в целом должно быть понятно, раз за програмное рисование взялся.

iLoveYou 29.09.2003 14:52

Цитата:

Оригинал написал(а) sergwizard

2 Sergey"iLoveYou"
А вот зачем ты тянешь в Action Script привычки из Pascal?
var id;
Это зачем?

тьфу, дурная привычка. но не в паскале дело.
я ж не говорил, что это единственно верный способ - чаще излишество.
Цитата:

setInterval(function(){mx()},delay); - РАБОТАЕТ.
потому что ничему не противоречит.

Пушистик 29.09.2003 16:21

Код:

setInterval(function(){mx()},delay);
объясни, пожалуйста, почему именно такая запись?

чё и здесь что то не то? :cool: если не понял, все написано в хэлпе...

елси кому не нравится так...как уже говорилось, можно так написать:

Код:

function mx() {
    trace("Ufff..!");
}
setInterval(mx,1000);

а может кому та так нравица:

Код:

mx = function () { trace("Ufff..!");};
setInterval(mx, 1000);

или так:
Код:

mx = function () { trace("Ufff..!");};
setInterval(function(){mx()}, 1000);

я просто привык так...пэтому и написал так... ;)

iLoveYou 29.09.2003 19:38

да не, Пушистый, я понимаю, что можно по-разному, а нужно?
если да, то да здравствуют сетПроперти и эвалы!!!
кстати, где в мануале такое написано:setInterval(function(){mx()},delay);?

sergwizard 29.09.2003 19:50

А можно так:
Код:

this.createEmptyMovieClip("line1",0);
line1.onEnterFrame = function(){
        w1<300 ? w1+=5 : w1=300;
        w1==300 ? delete this.onEnterFrame : w1;
        with(line1) {
                line1._x = 125;
                line1._y = 125;
                line1.clear();
                lineStyle(2, 0xFF0000, 100);
                lineTo(w1, 0);
        }
}


sergwizard 29.09.2003 21:40

Вложений: 1
А еще можно так рисовать. Лень было рисовать карандаш, так что я скоммуниздил его у Dimonius(а)

TwoKey 30.09.2003 05:38

Большое спасибо! Получил что хотел. А вот так код в два раза меньше ;). только я на счет clear() не уверен, я не совсем понял зачем его использовать, хотя и без него работает.

this.createEmptyMovieClip("line1",0);
line1.onEnterFrame = function(){
w1<400 ? w1+=5 : w1=300;
w1==300 ? delete this.onEnterFrame : w1;
with(line1) {
_x = 225;
_y = 125;
// clear();
lineStyle(2, 0xFF0000, 100);
lineTo(w1, 0);
}
}

TwoKey 30.09.2003 06:21

Большое спасибо! Получил что хотел. А вот так код в два раза меньше ;). только я на счет clear() не уверен, я не совсем понял зачем его использовать, хотя и без него работает.

this.createEmptyMovieClip("line1",0);
line1.onEnterFrame = function(){
w1<400 ? w1+=5 : w1=300;
w1==300 ? delete this.onEnterFrame : w1;
with(line1) {
_x = 225;
_y = 125;
// clear();
lineStyle(2, 0xFF0000, 100);
lineTo(w1, 0);
}
}

Пушистик 30.09.2003 16:09

Цитата:

Оригинал написал(а) Sergey"iLoveYou"
да не, Пушистый, я понимаю, что можно по-разному, а нужно?
если да, то да здравствуют сетПроперти и эвалы!!!
кстати, где в мануале такое написано:setInterval(function(){mx()},delay);?

Цитата:

Usage 1:The following example calls an anonymous function every 1000 milliseconds (every 1 second).

setInterval( function(){ trace("interval called"); }, 1000 );
там не написано что этот способ deprecated, а наоборот он стоит как сбособ номер 1...

iLoveYou 30.09.2003 22:49

Цитата:

Оригинал написал(а) Пушистик

там не написано что этот способ deprecated, а наоборот он стоит как сбособ номер 1...

setInterval( function(){ trace("interval called"); }, 1000 );
и
setInterval(function(){mx()},delay); - все-таки разные строки, ты не находишь? мы, видимо, на разных языках разговариваем.


Код:

setInterval( function(){ trace("interval called"); }, 1000 );
или
Код:

mx = function () { trace("Ufff..!");};
setInterval(mx, 1000);

иные способы - не оправдывающее себя извращение.


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

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