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

BMF 12.02.2002 14:15

Поблемка с функцией
 
Решил написать вот на досуге функцию, которая бы соединяла линией две точки.Думал сделать так чтобы в onClipEvent(enterFrame) мувика ( в котором находилась бы сама эта линия ) вызывалась бы функция, в тоторую бы пересылались имена двух точек а функция уже бы сама просчитывала их координаты,расстояние между ними , _rotation и _height мувика-линии...
Написал.Не работает!
Причём если просто повесить тот-же код на мувик - всё работает, но если запихать его в функцию - нет.Может я что-то не так понимаю?Может синтаксис не правильный?
Код таков ( прописан в первый кадр рута ):

function connectLines(obj1,obj2)
{
x2 = _root.obj1._x;
y2 = _root.obj1._y;
x1 = _root.obj2._x;
y1 = _root.obj2._y;
distanse = Math.abs(Math.sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1)));
_rotation = -180*Math.atan2(x1-x2, y1-y2)/Math.PI;
linia._height = distanse;
_x = _root.obj2._x;
_y = _root.obj2._y;
}

Далее, onClipEvent(enterFrame) я прописываю :
_root.connectLines(tochkaA,tochkaB)

Что не так?Почему не работает,подскажите,плиз....

ish 12.02.2002 15:20

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

BMF 12.02.2002 15:48

Спасибо за ответ,но оно всё равно не работает:))
Если честно, я не знал что функция выполняется в руте...
Я переписал код, исправил пути к мувам:

function connectLines(obj1,obj2,targetname)
{
x2 = _root.obj1._x;
y2 = _root.obj1._y;
x1 = _root.obj2._x;
y1 = _root.obj2._y;
distanse = Math.abs(Math.sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1)));
_root.targetname._rotation = -180*Math.atan2(x1-x2, y1-y2)/Math.PI;
_root.targetname.linia._height = distanse;
_root.targetname.__x = _root.obj2._x;
_root.targetname.__y = _root.obj2._y;
}

А в муве пишу:
_root.connectLines(tochkaA,tochkaB,_name)

Может опять я где чего напартачил?

ish 12.02.2002 15:53

_name не есть ссылка на обьект, это строка.

function connectLines(obj1,obj2,targetname)
{
x2 = obj1._x;
y2 = obj1._y;
x1 = obj2._x;
y1 = obj2._y;
distanse = Math.abs(Math.sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1)));
targetname._rotation = -180*Math.atan2(x1-x2, y1-y2)/Math.PI;
targetname.linia._height = distanse;
targetname._x = obj2._x;
targetname._y = obj2._y;
}

в муве:
_root.connectLines(tochkaA,tochkaB,this)

BMF 12.02.2002 16:00

Ура!!!!Заработала!!!:)))
Спасибо огромное:)))

BMF 12.02.2002 16:28

Кстати, продолжая тему...
Я заметил, что если создать функцию, которая бы отвечала бы за движение тех самых точек ( которые соединяются линией ), то они хоть и двигаются, но как-то очень судорожно и в унисон, все вместе.Когда скрипт висит просто на мувмке то движение более мягкое и у каждого мувика своё...
От чего это может быть?
Вот функция:

function dot(obj)
{
obj._x<x0 ? accellerator++ : accellerator--;
obj._y<y0 ? accellerator2++ : accellerator2--;
accellerator *= 0.9;
accellerator2 *= 0.9;
obj._x += accellerator;
obj._y += accellerator2;
}

а в муве:

onClipEvent ( load) {
x0 = 170
y0 = 170
}
onClipEvent (enterFrame) {
_root.dot(this)
}

ish 13.02.2002 03:58

onClipEvent (enterFrame) {
_root.dot(this)
updateAfterEvent();
}

BMF 13.02.2002 11:55

Насколько я понимаю updateAfterEvent(); относится только к событиям мыши и кнопок клавиатуры...По крайней мере так написано в хэлпе.
Скажем так, на мой злосчастный мувик updateAfterEvent(); никак не повлиял..:))
Может тут имеет смысл какой-нибудь прототип попытаться написать?Просто такое ощущение ,что функция возвращает значения во все мувики одновременно и синхронно.Наверное поэтому они выглядят как приклеенные друг к другу.

ish 13.02.2002 12:07

звиня, за глупый предыдущий ответ, опять не прочитал вопрос до конца.

дык, правильно они у будут так двигаться, функцию то ты исполняешь в руте, а не в мувике, то есть и переменные учавствуещие в функцие, будут иметь одинаковые значения, не зависимо от мувика вызвавшего функцию

function dot(obj)
{
obj._x<obj.x0 ? obj.accellerator++ : obj.accellerator--;
obj._y<obj.y0 ? obj.accellerator2++ : obj.accellerator2--;
obj.accellerator *= 0.9;
obj.accellerator2 *= 0.9;
obj._x += obj.accellerator;
obj._y += obj.accellerator2;
}

так будет правильно, это раз

два, подобные вещи конечно лучше определять в прототипе

MovieClip.prototype.dot=function() {
_x<obj.x0 ? accellerator++ : accellerator--;
_y<obj.y0 ? accellerator2++ : accellerator2--;
accellerator *= 0.9;
accellerator2 *= 0.9;
_x += accellerator;
_y += accellerator2;
}

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

onClipEvent ( load) {
x0 = 170
y0 = 170
}
onClipEvent (enterFrame) {
dot()
}

BMF 13.02.2002 12:44

Ух ты!Класс какой:)
Спасибо большое!
Я тут вдруг одним махом смекнул как работает прототип и с чем его едят, хотя ещё 5 минут назад с ужасом думал как-же его такого страшного писать:))))
Всё работает,огромное спасибо:)


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

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