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

Therion 04.06.2006 17:43

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

i=0
X=0
Y=0       
function fun(obj,e){
for(i;i<obj.length;i++){
                X+=(obj[i]._x-e._x)
                Y+=(obj[i]._y-e._y)}
                e._x+=X/2
                e._y+=Y/2
                trace(Y)
                }
_root.onEnterFrame=function(){
  fun([p1,p2],dd)
                }

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

for(i;i<obj.length;i++){
                X+=(obj[i]._x-e._x)
                Y+=(obj[i]._y-e._y)}

Выполняется только один раз,помогите как её зацыклить.

iNils 04.06.2006 18:00

Тема закрыта до тех пор пока автор не пришлет мне в приват нормально название темы.

iNils 04.06.2006 18:16

Код:

function fun (obj, e) {
        var sx = (obj[0]._x - obj[1]._x) / 2 + obj[1]._x;
        var sy = (obj[0]._y - obj[1]._y) / 2 + obj[1]._y;
        var dx = (sx - e._x) / 10;
        var dy = (sy - e._y) / 10;
        e._x += dx;
        e._y += dy;
        if (Math.abs (dx) < 0.1 and Math.abs (dy) < 0.1) {
                return false;
        } else {
                return true;
        }
}
_root.onEnterFrame = function () {
        var flag = fun ([p1, p2], dd);
        if (!flag) {
                delete this.onEnterFrame;
        }
};


Therion 04.06.2006 18:26

Гениально, спасибо:)
P.S.
А зачем писать "var"? Без него ведь тоже все работает...

Nirth 04.06.2006 18:33

написав var мы определили что flag это локальная переменная метода onEnterFrame, таким образом она сама уничтожается когда больше не нужна.
Так же без var переменная сохраниться в _root. зачем лишнее потребление памяти?

Therion 04.06.2006 18:38

хм, а как сделать перемещение обьекта в центр между тремя или более обьектами?

iNils 04.06.2006 19:08

Код:

function fun (obj, e) {
        var x = 0;
        var y = 0;
        for (var i = 0; i < obj.length; i++) {
                x += obj[i]._x;
                y += obj[i]._y;
        }
        x /= (obj.length);
        y /= (obj.length);
        var dx = (x - e._x) / 10;
        var dy = (y - e._y) / 10;
        e._x += dx;
        e._y += dy;
        if (Math.abs (dx) < 0.1 and Math.abs (dy) < 0.1) {
                return false;
        } else {
                return true;
        }
}
_root.onEnterFrame = function () {
        var flag = fun ([p1, p2, p3, p4, p5], dd);
        if (!flag) {
                delete this.onEnterFrame;
        }
};


Therion 04.06.2006 20:18

Во,супер...
Низкий тебе поклон:)


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

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