Форум 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)
-   -   Очередность выполнения функций (http://www.flasher.ru/forum/showthread.php?t=98247)

V_e_g_a 09.07.2007 22:56

Очередность выполнения функций
 
Как можно организовать выполнение второй функции после окончания выполнения первой? Третей - после выполнения второй и т. д.
И еще не пойму как работают глобальные переменные. Ниже привожу код, который не работает до конца. Может как то по-другому можно сделать?

Код:

_root.createEmptyMovieClip ("main_top", 5);
main_top._x=150;
main_top._y=296;
main_top.lineStyle (0, 0xFF0000, 100);
main_top.beginFill (0xFF0000);
main_top.moveTo (0, 0);
main_top.lineTo (501, 0);
main_top.lineTo (501, 3);
main_top.lineTo (0, 3);
main_top.lineTo (0, 0);
main_top.endFill ();

_root.createEmptyMovieClip ("main_middle", 3);
main_middle._x=150;
main_middle._y=300;
main_middle.lineStyle (0, 0xFBFFE6, 100);
main_middle.beginFill (0xFBFFE6);
main_middle.moveTo (0, 0);
main_middle.lineTo (500, 0);
main_middle.lineTo (500, 3);
main_middle.lineTo (0, 3);
main_middle.lineTo (0, 0);
main_middle.endFill ();

_root.createEmptyMovieClip ("main_bottom", 4);
main_bottom._x=150;
main_bottom._y=304;
main_bottom.lineStyle (0, 0xFF0000, 100);
main_bottom.beginFill (0xFF0000);
main_bottom.moveTo (0, 0);
main_bottom.lineTo (501, 0);
main_bottom.lineTo (501, 3);
main_bottom.lineTo (0, 3);
main_bottom.lineTo (0, 0);
main_bottom.endFill ();

_root.createEmptyMovieClip ("main_l", 1);
main_l._x=150;
main_l._y=0;
main_l.lineStyle (0, 0xFBFFE6, 100);
main_l.beginFill (0xFBFFE6);
main_l.moveTo (0, 0);
main_l.lineTo (1, 0);
main_l.lineTo (1, 1);
main_l.lineTo (0, 1);
main_l.lineTo (0, 0);
main_l.endFill ();

_root.createEmptyMovieClip ("main_r", 2);
main_r._x=649;
main_r._y=600;
main_r.lineStyle (0, 0xFBFFE6, 100);
main_r.beginFill (0xFBFFE6);
main_r.moveTo (0, 0);
main_r.lineTo (1, 0);
main_r.lineTo (1, 1);
main_r.lineTo (0, 1);
main_r.lineTo (0, 0);
main_r.endFill ();

_global.x_1=0;
_global.x_2=0;
function schetchik_I()
{
        main_l._height=main_l._height+5;
        main_r._height=main_r._height+10;
        main_r._y=main_r._y-5;
        if (main_l._height>296)
        {
                _global.x_1=1;
                clearInterval(inter_I);
        }
}
var inter_I:Number=setInterval(schetchik_I, 1);


if (_global.x_1==1)
{
        function schetchik_II()
        {
                main_l._height=main_l._height-5;
                main_r._height=main_r._height-10;
                main_r._y=main_r._y+5;
                main_top._y=main_top._y-5;
                main_bottom._y=main_bottom._y+5;
                main_middle._y=main_middle._y-5;
                main_middle._height=main_middle._height+10;
                if (main_middle._height>400)
                {
                        _global.x_2=1;
                        main_middle._y=100;
                        main_middle._height=400;
                        main_top._y=96;
                        main_bottom._y=502;
                        clearInterval(inter_II);
                }
        }
        var inter_II:Number=setInterval(schetchik_II, 1);
}

if (_global.x_2==1)
{
        function schetchik_III()
        {
                main_l._y=main_l._y+5;
                main_r._y=507;
                main_r._height=main_r._height-5;
                if (main_r._height<6)
                {
                        main_r._height=0;
                        clearInterval(inter_III);
                }
        }
        var inter_III:Number=setInterval(schetchik_III, 1);
}


BigDan 09.07.2007 23:57

в конце каждой функции вызывай следующую функцию.
А вообще если записывать так:
Код:

func1();
func2();

то func2 не вызывается пока не выполнится func1.

V_e_g_a 10.07.2007 01:05

Все равно не понял как. Там вызов происходит по setInterval и если просто попорядку писать функции, то они начнутся практически одновременно. Можно ли как-то внутри функции присвоить переменной значение, а потом уже вне функции при проверке значения этой переменной запустить или не запустить другую функцию? Ну или что-то похожее как сделать?

iNils 10.07.2007 02:26

Флеш выполняет код последовательно, паралелльных потоков нет.
К примеру
Код:

function a () {
        trace ("enter a");
        for (i < 0; i < 1000000; i++) {
                k = Math.random ();
        }
        trace ("exit a");
}
function b () {
        trace ("b");
}
setInterval(a, 1);
setInterval(b, 1);


V_e_g_a 11.07.2007 01:41

Попробуй выполнить этот код и увидишь, что функции выполняются параллельно (одновременно).

Код:

_root.createEmptyMovieClip ("m", 1);
m._x=0;
m._y=100;
m.lineStyle (0, 0xFF0000, 100);
m.beginFill (0xFF0000);
m.moveTo (0, 0);
m.lineTo (25, 0);
m.lineTo (25, 25);
m.lineTo (0, 25);
m.lineTo (0, 0);
m.endFill ();

_root.createEmptyMovieClip ("n", 2);
n._x=0;
n._y=200;
n.lineStyle (0, 0x33289B, 100);
n.beginFill (0x33289B);
n.moveTo (0, 0);
n.lineTo (25, 0);
n.lineTo (25, 25);
n.lineTo (0, 25);
n.lineTo (0, 0);
n.endFill ()


function p_1()
{
        m._x=m._x+5;
        if (m._x>300)
        {
                clearInterval(i_1)
        }
}

function p_2()
{
        n._x=n._x+5;
        if (n._x>300)
        {
                clearInterval(i_2)
        }
}

var i_1:Number=setInterval(p_1, 1);
var i_2:Number=setInterval(p_2, 1);


iNils 11.07.2007 03:31

Не вижу. Я вижу, что раз в 1 миллисекунду происходит вызов двух функций, сначала вызывается одна, потом другая. Но во время выполнения p_1, p_2 не работает и наоборот.

V_e_g_a 11.07.2007 11:39

Ясно. А как сделать, что бы первая функция выполнялась n-ое кол-во раз до наступления условия, описанного ней, а только потом запускалась на выполнение вторая функция?

iNils 11.07.2007 12:12

после clearInterval, запустить второй setInterval, а не сразу оба.

V_e_g_a 11.07.2007 18:56

Ага, я уже и сам догадался. Не могу только теперь понять как остановить второй setInterval.

iNils 11.07.2007 19:38

Код:

function p_1 () {
        m._x = m._x + 5;
        if (m._x > 300) {
                clearInterval (i_1);
                i_1 = setInterval (p_2, 1);
        }
}
function p_2 () {
        n._x = n._x + 5;
        if (n._x > 300) {
                clearInterval (i_1);
        }
}
var i_1:Number = setInterval (p_1, 1);


V_e_g_a 11.07.2007 22:49

Классно. Спасибо. Сам бы не догадался.


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

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