Форум 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=93431)

Odyssus 21.03.2007 11:11

Как отследить, когда заканчивается движение в функции
 
Заранее извиняюсь, что размещаю тут пост, но в начинающих мне не ответили (
Есть у меня 9 квадратиков, они движутся по координатам, которые я задаю в массиве coord, движения сделал функцией movieSquare.
Вот код:
Код:

1. stop();
2. import mx.transitions.*;
3. import mx.transitions.easing.*;
4 .movieSquare = function(tween,namen,maxX,maxY,interval){
5.        var tween = new Tween(namen, "_y", None.easeOut, namen._y, maxY, interval, true);
6.        var tween = new Tween(namen, "_x", None.easeOut, namen._x, maxX, interval, true);
7. }
8.
9. for (i=1;i<=9;i++){
10.        var movieName = _root["square_"+i];
11.        var tweenName = ["tween_"+i];
12.        movieSquare(tweenName,movieName,coord[i].endX,coord[i].endY,2.8);
13.        }

Теперь, мне нужно, чтобы когда на окончательное место прибыл 5 квадрат, запустить следующую анимацию, и когда все закончились - то еще одну.
Пробовал вставить в функцию после var tween (6 строчка)
tween_5.onMotionFinished=function(){....} (после анимации пятого квадрата)
tween_9.onMotionFinished=function(){....} (после всех анимаций квадратов)
ничего не выходит... функция не воспринимает эту строку.
может подскажите, как можно решить эту траблу. Заранее благодарен!

iNils 21.03.2007 11:24

Что я не помню, что бы ваша тема была в начинающих.
Что значит "функция не воспринимает эту строку"? Какую строку и какая функция? И к чему нам ваша нумерация строк, мы потом должны вручную их убирать? Комменты надо просто писать.

etc 21.03.2007 11:57

Цитата:

Сообщение от iNils
Что я не помню, что бы ваша тема была в начинающих.

http://flasher.ru/forum/showthread.php?t=93394

Odyssus 21.03.2007 12:02

вчера в 14-46 :-) писал пост этот!
ну если в тупую прописать:
Код:

stop();
import mx.transitions.*;
import mx.transitions.easing.*;
var tween_1 = new Tween(square_1, "_y", None.easeOut, square_1._y, 230, 3.5, true);
var tween_1 = new Tween(square_1, "_x", None.easeOut, square_1._x, 327, 3.5, true);
var tween_2 = new Tween(square_2, "_y", None.easeOut, square_2._y, 230, 3.5, true);
var tween_2 = new Tween(square_2, "_x", None.easeOut, square_2._x, 377, 3.5, true);
var tween_3 = new Tween(square_3, "_y", None.easeOut, square_3._y, 230, 3.5, true);
var tween_3 = new Tween(square_3, "_x", None.easeOut, square_3._x, 427, 3.5, true);

var tween_4 = new Tween(square_4, "_y", None.easeOut, square_4._y, 280, 3.5, true);
var tween_4 = new Tween(square_4, "_x", None.easeOut, square_4._x, 327, 3.5, true);
var tween_5 = new Tween(square_5, "_y", None.easeOut, square_5._y, 280, 3.5, true);
var tween_5 = new Tween(square_5, "_x", None.easeOut, square_5._x, 377, 3.5, true);
var tween_6 = new Tween(square_6, "_y", None.easeOut, square_6._y, 280, 3.5, true);
var tween_6 = new Tween(square_6, "_x", None.easeOut, square_6._x, 427, 3.5, true);

var tween_7 = new Tween(square_7, "_y", None.easeOut, square_7._y, 330, 3.5, true);
var tween_7 = new Tween(square_7, "_x", None.easeOut, square_7._x, 327, 3.5, true);
var tween_8 = new Tween(square_8, "_y", None.easeOut, square_8._y, 330, 3.5, true);
var tween_8 = new Tween(square_8, "_x", None.easeOut, square_8._x, 377, 3.5, true);
var tween_9 = new Tween(square_9, "_y", None.easeOut, square_9._y, 330, 3.5, true);
var tween_9 = new Tween(square_9, "_x", None.easeOut, square_9._x, 427, 3.5, true);

tween_5.onMotionFinished=function(){
действие
}

в таком случае, действие мое работает, после того, как закончилось движение 5-го квадрата, а функцию и цикл, я сделал, чтобы кода меньше было. Так вот когда функцией делаю движения всех квадратов - так не могу отследить конец движения 5-го квадрата, чтобы началось мое действие. Наверное, плохо обьясняю я.. (
Вот так я упростил свой код, написанный выше
Код:

stop();
import mx.transitions.*;
import mx.transitions.easing.*;
movieSquare = function(tween,namen,maxX,maxY,interval){
        var tween = new Tween(namen, "_y", None.easeOut, namen._y, maxY, interval, true);
        var tween = new Tween(namen, "_x", None.easeOut, namen._x, maxX, interval, true);

tween_5.onMotionFinished=function(){
действие
}

}

for (i=1;i<=9;i++){
        var movieName = _root["square_"+i];
        var tweenName = ["tween_"+i];
        movieSquare(tweenName,movieName,coord[i].endX,coord[i].endY,2.8);
        }


etc 21.03.2007 12:24

Код:

stop();
import mx.transitions.*;
import mx.transitions.easing.*;
movieSquare = function(tween,namen,maxX,maxY,interval){
        var tween1 = new Tween(namen, "_y", None.easeOut, namen._y, maxY, interval, true);
        var tween2 = new Tween(namen, "_x", None.easeOut, namen._x, maxX, interval, true);
        return tween1;
}

for (i=1;i<=9;i++){
        var movieName = _root["square_"+i];
        var tween = movieSquare(tweenName,movieName,coord[i].endX,coord[i].endY,2.8);
        if (i==5) {
                tween.onMotionFinished = function() {
                        trace(this.obj);
                }
        }
}

Только смысл отлавливать именно у пятого твина что-то, если они все идут одно время?

Odyssus 21.03.2007 13:00

я, в дальнейшем, буду брать для каждого мува разные времена на анимацию, тогда будет не одно время...
Спасибо, огромное, работает!
Вопрос, для себя - в функции tween1, tween2, а возвращает функция tween1 - почему?

etc 21.03.2007 13:11

Ну можно tween2, если хотите, не принципиально. Первый твинит _x, второй _y, по длительности одинаковы. Т.е. без разницы, на какой навешивать onMotionFinished.

Odyssus 21.03.2007 13:45

Все, понял, спасибо огромное!


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

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