![]() |
|
||||||||||
|
|||||
|
Регистрация: Apr 2001
Сообщений: 137
|
Решил написать вот на досуге функцию, которая бы соединяла линией две точки.Думал сделать так чтобы в 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) Что не так?Почему не работает,подскажите,плиз.... |
|
|||||
|
потому что ф-ия исполняется в корне а не в мувике из которого ее вызываешь, следствеено и операции она будет производить над обьектами относительно корня а не искомого мувика. правь пути к обьектам
|
|
|||||
|
Регистрация: Apr 2001
Сообщений: 137
|
Спасибо за ответ,но оно всё равно не работает
)Если честно, я не знал что функция выполняется в руте... Я переписал код, исправил пути к мувам: 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) Может опять я где чего напартачил? |
|
|||||
|
_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) Последний раз редактировалось ish; 12.02.2002 в 15:54. |
|
|||||
|
Регистрация: Apr 2001
Сообщений: 137
|
Ура!!!!Заработала!!!
))Спасибо огромное )) |
|
|||||
|
Регистрация: Apr 2001
Сообщений: 137
|
Кстати, продолжая тему...
Я заметил, что если создать функцию, которая бы отвечала бы за движение тех самых точек ( которые соединяются линией ), то они хоть и двигаются, но как-то очень судорожно и в унисон, все вместе.Когда скрипт висит просто на мувмке то движение более мягкое и у каждого мувика своё... От чего это может быть? Вот функция: 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) } |
|
|||||
|
onClipEvent (enterFrame) {
_root.dot(this) updateAfterEvent(); } |
|
|||||
|
Регистрация: Apr 2001
Сообщений: 137
|
Насколько я понимаю updateAfterEvent(); относится только к событиям мыши и кнопок клавиатуры...По крайней мере так написано в хэлпе.
Скажем так, на мой злосчастный мувик updateAfterEvent(); никак не повлиял.. )Может тут имеет смысл какой-нибудь прототип попытаться написать?Просто такое ощущение ,что функция возвращает значения во все мувики одновременно и синхронно.Наверное поэтому они выглядят как приклеенные друг к другу. |
|
|||||
|
звиня, за глупый предыдущий ответ, опять не прочитал вопрос до конца.
дык, правильно они у будут так двигаться, функцию то ты исполняешь в руте, а не в мувике, то есть и переменные учавствуещие в функцие, будут иметь одинаковые значения, не зависимо от мувика вызвавшего функцию 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() } |
|
|||||
|
Регистрация: Apr 2001
Сообщений: 137
|
Ух ты!Класс какой
![]() Спасибо большое! Я тут вдруг одним махом смекнул как работает прототип и с чем его едят, хотя ещё 5 минут назад с ужасом думал как-же его такого страшного писать )))Всё работает,огромное спасибо ![]() |
![]() |
Часовой пояс GMT +4, время: 20:48. |
|
|
« Предыдущая тема | Следующая тема » |
|
|