Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Архив Flasher.ru > Flash > ActionScript

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему  
Старый 12.02.2002, 14:15
BMF вне форума Посмотреть профиль Отправить личное сообщение для BMF Найти все сообщения от BMF
  № 1  
BMF

Регистрация: 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)

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

Старый 12.02.2002, 15:20
ish вне форума Посмотреть профиль Отправить личное сообщение для ish Посетить домашнюю страницу ish Найти все сообщения от ish
  № 2  
ish

Регистрация: Sep 2000
Адрес: :)
Сообщений: 2,374
Отправить сообщение для ish с помощью ICQ
потому что ф-ия исполняется в корне а не в мувике из которого ее вызываешь, следствеено и операции она будет производить над обьектами относительно корня а не искомого мувика. правь пути к обьектам

Старый 12.02.2002, 15:48
BMF вне форума Посмотреть профиль Отправить личное сообщение для BMF Найти все сообщения от BMF
  № 3  
BMF

Регистрация: 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)

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

Старый 12.02.2002, 15:53
ish вне форума Посмотреть профиль Отправить личное сообщение для ish Посетить домашнюю страницу ish Найти все сообщения от ish
  № 4  
ish

Регистрация: Sep 2000
Адрес: :)
Сообщений: 2,374
Отправить сообщение для ish с помощью ICQ
_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.
Старый 12.02.2002, 16:00
BMF вне форума Посмотреть профиль Отправить личное сообщение для BMF Найти все сообщения от BMF
  № 5  
BMF

Регистрация: Apr 2001
Сообщений: 137
Ура!!!!Заработала!!!))
Спасибо огромное))

Старый 12.02.2002, 16:28
BMF вне форума Посмотреть профиль Отправить личное сообщение для BMF Найти все сообщения от BMF
  № 6  
BMF

Регистрация: 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)
}

Старый 13.02.2002, 03:58
ish вне форума Посмотреть профиль Отправить личное сообщение для ish Посетить домашнюю страницу ish Найти все сообщения от ish
  № 7  
ish

Регистрация: Sep 2000
Адрес: :)
Сообщений: 2,374
Отправить сообщение для ish с помощью ICQ
onClipEvent (enterFrame) {
_root.dot(this)
updateAfterEvent();
}

Старый 13.02.2002, 11:55
BMF вне форума Посмотреть профиль Отправить личное сообщение для BMF Найти все сообщения от BMF
  № 8  
BMF

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

Старый 13.02.2002, 12:07
ish вне форума Посмотреть профиль Отправить личное сообщение для ish Посетить домашнюю страницу ish Найти все сообщения от ish
  № 9  
ish

Регистрация: Sep 2000
Адрес: :)
Сообщений: 2,374
Отправить сообщение для ish с помощью ICQ
звиня, за глупый предыдущий ответ, опять не прочитал вопрос до конца.

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

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()
}

Старый 13.02.2002, 12:44
BMF вне форума Посмотреть профиль Отправить личное сообщение для BMF Найти все сообщения от BMF
  № 10  
BMF

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

Создать новую тему   Часовой пояс GMT +4, время: 20:48.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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