Просмотр полной версии : Обращение к мувиклипу через _root
Слышал что лучше не надо обращаться к мувиклипу через _root и вообще нестоит менять его _x,_y, не могли бы сказать почему ?
Ведь работает вроде без ошибок
я тоже слышал что к МК лучше обращаться через рут, потому что все _parent тоже сводятся к руту. а что ненадо менять его координаты это чуш, т.к. флэш служит для анимации - соответственно для движения.
alexcon314
30.07.2008, 00:21
Слышал что лучше не надо обращаться к мувиклипу через _root
Правильно слышали.
Ведь работает вроде без ошибок
И это правильно.
Вопрос упирается в качество кода и программы вцелом. И это становится очень заметно на больших проектах, а так же при коллективной работе. Тем более, что без рута можно обойтись. Нужно ли это вам - решайте сами.
А как без него обходиться, если допустим из класса надо поменять координаты мувиклипа, который находится в _root ?
Создавать переменную, которая будет ссылаться на _root ?
alexcon314
30.07.2008, 01:14
Классы ведь пишут в надежде повторно использовать наработанный код, так?
Представьте, что вы или кто-то еще попытаетесь использовать код вашего класса , где присутствует _root. не в отношении клипа в руте. Что будет?
Создавать переменную, которая будет ссылаться на _root ?
В этом есть смысл? Это как-то поможет лучше организовать код? Тогда можно. Мы ведь не о рецептах на все случаи жизни сейчас говорим? Можно передавать ссылку на клип, управляемый вашим классом, в конструктор класса, скажем, тогда рут вообще не нужен в классе. Действительно, какая разница, где клип находится? Есть ссылка на него? - есть, вот мы через нее и работаем..
Слышал что лучше не надо обращаться к мувиклипу через _root и вообще нестоит менять его _x,_y, не могли бы сказать почему ?
Ведь работает вроде без ошибок
А потом ваш ролик захотят куда-нибудь подгрузить и начнутся проблемы из-за того, что он не работает.
crazyone
30.07.2008, 01:42
А как без него обходиться, если допустим из класса надо поменять координаты мувиклипа, который находится в _root ?
Создавать переменную, которая будет ссылаться на _root ?
У вашего класса должна быть ссылка на сам этот мувиклип.
У вашего класса должна быть ссылка на сам этот мувиклип.
Можете объяснить по подробнее, я так понимаю ссылка на сам мувиклип (назовём его mc1) будет _root.mc1, но опять же мы используем _root...
или я что-то не так понял ?
crazyone
30.07.2008, 03:07
Если mc1 создается из класса, ссылка на него сохраняется в переменной класса.
Если mc1 создается вне класса, тогда же эта ссылка передается в класс, где сохраняется и потом используется.
А можете пожалуйста написать пример. Просто я не совсем понимаю как передать ссылку mc1, который создался вне класса и сохранить.
В моём понимании это public var mc:MovieClip = _root.mc1;
crazyone
30.07.2008, 03:45
Там, где создали ваш мувиклип, там же и передали вашему объекту ссылку на него.
var myObject:MyClass=new MyClass();
var mc1=this.createEmptyMovieClip("mc1",this.getNextHighestDepth());
myObject.mc=mc1;
// хотя лучше писать под это отдельны метод в вашем классе:
myObject.setMC(mc1);
Представьте, что у вас совсем нету переменной _root и ищите другие способы связывать объекты.
А нельзя к примеру создать отдельный класс, который постоянно будет ссылаться на ссылку _root'a ?
тоесть:
class RootLink{
public static var mRootLink:MovieClip=null;
public static function setRootLink(mRoot:MovieClip)
{
mRootLink=mRoot;
}
}
Во .fla:
RootLink.setRootLink(this);
И потом в каком-то классе ссылаться на объект, находящийся в _root, как RootLink.mRootLink.object ?
А нельзя к примеру создать отдельный класс, который постоянно будет ссылаться на ссылку _root'a ?
Можно, но зачем вам _root? Что вы там забыли в нём?
Постоянно надо ссылаться из класса к разным объектам находящимся в _root.
Постоянно надо ссылаться из класса к разным объектам находящимся в _root.
Значит ваш проект спроектирован неверно, если вам нужно делать крюк через рут для обращения к какому-нибудь объекту.
Представьте, что ваш проект, это коробка в которой лежит два футляра в котором по три ручки. И эта коробка вы создали на кухне. Кухня это _root. И каждый раз, для того, чтобы взять ручку, вы говорите - где:
Кухня.Коробка.Футляр2.Ручка3
Но вот вы создали коробку в Комнатк. И при попытке взять ручку по адресу Кухня.Коробка.Футляр2.Ручка3 вы оказываетесь без ручки, так как коробки на кухне нет. Поэтому при создании коробки, вместо точного указания, где коробка создавалась, вы используете относительное место и храните это место как надпись на коробке.
То есть МестоСоздания.Коробка.Футляр2.Ручка3, а МестоСоздания это this.
Тоесть надо создавать объект в классе, а потом присваивать через set путь к этому объекту, который в _root ?
alexcon314
01.08.2008, 00:09
путь к этому объекту, который в _root
Просто не размещайте объектов в _root. Тогда и ссылаться на них не придется. Хотя бы так.
_root - это привязка адресации всех объектов к таймлайну ролика. Своего рода "штучная" работа. Оторвать все от этого таймлайна, например загрузив в другой ролик или попытавшись в том же виде использовать код в другом проекте, будет трудно.
Использование рута - как выложить стену из неотесанных камней, все притерто, ничего не переставишь. Без рута - что выложить стену из гладких кирпичей: не понравился кирпич - заменил на другой без проблем или местами поменял. Хотя в том и другом случае конечный результат вобщем-то одинаков - стена она и есть стена, качество будет разное. Новую стену вы из тех же кирпичей построите быстро, кирпичам все равно в какое место стены их замуруют, а вот из камней - опять притирать.
Вот и делайте свои объекты так, что бы не надо было потом долго решать куда его положить, что бы правильно ссылаться на него.
Тоесть надо использовать this:
this.attachMovie("mClip", "mClip", this.getNextHighestDepth());
mClipClass:MyClass = new MyClass(mClip)
А в классе:
class MyClass {
private var _mMyClip:MovieClip = null;
public function MyClass(mMyClip:MovieClip) {
_mMyClip=mMyClip;
}
}
И потом уже работаем с _mMyClip в самом классе.
alexcon314
01.08.2008, 01:20
Похоже на правду ).
Заметьте, this.attachMovie("mClip... можно написать где угодно. Например, в другом классе. (хоть в _root :D. шутка). mClipр приаттачится к тому объекту(мувику) который этот код и вызвал.
А экземпляр MyClass будет работать с любым мувиком, где бы он ни находился.
Использовать этот код повторно - без проблем. Просто размещаем его в нужном месте проекта и все.
Для чего все это и делается, собственно.
crazyone
01.08.2008, 12:10
Использовать этот код повторно - без проблем. Просто размещаем его в нужном месте проекта и все.
Для чего все это и делается, собственно.
Удивительная интерпретация выражения "повторное использование кода".
gloomyBrain
02.08.2008, 00:32
...И при попытке взять ручку по адресу Кухня.Коробка.Футляр2.Ручка3 вы оказываетесь без ручки...
нет, ну кто хранит на кухне ручки? =))
ЗЫ
просто шутка
Fernando Costa
02.08.2008, 01:48
с другой стороны, если проект зашел слишом далеко, и все захардкожено на _root то чтобы не было проблем с изменением кухни на комнату достаточно написать в первом кадре this._lockroot = true
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.