PDA

Просмотр полной версии : Проблемка с централизацией кода


island
22.10.2006, 18:42
В первом кадре fla-файла :
import com.General;
General.main(_root);

Класс General:
import com.Line;
class com.General {
private var l:Line;
public function General() {
l = new Line(_root);
}
public static function main(mc:MovieClip) {
var g = new General();
}
}

Класс Line:
class com.Line {
private var line_mc:MovieClip;
public function Line(mc:MovieClip) {
line_mc = mc.attachMovie("line","line",10);
line_mc.baton.onRelease = function() {
trace("строка 1");
some_func();
}
}
private function some_func() {
trace("строка 2");
}
}

В библиотеке fla-файла имеется мувиклип line, внутри которого кнопка с именем “baton”. При тестировании фильма «строка 1» выводится, а «строка 2» нет. Насколько я понимаю, это происходит из-за того, что интерпретатор ищет функцию some_func на временной шкале клипа, на котором расположена кнопка baton, а вовсе не в классе Line. Как бы сделать так, чтобы при обрабатывании событий с кнопки ссылаться на функцию внутри класса?
Я придумал временное решение, но оно меня по некоторым причинам не устраивает.
В функции main класса General при событии onMouseDown происходит вызов метода класса Line, в котором хиттестом проверяется попадание щелчка мыши по кнопке.

etc
22.10.2006, 19:32
Используйте Delegate.
line_mc.baton.onRelease = mx.utils.Delegate.create(this,this.some_func);

з.Ы. Вас не научили оформлять код тегами CODE?
з.Ы.Ы. А почему в полных именах классов отсутствует доменное имя, но есть зона?

island
23.10.2006, 07:59
Используйте Delegate.
line_mc.baton.onRelease = mx.utils.Delegate.create(this,this.some_func);
Спасибо, работает ) изящно и без велосипедов.


з.Ы. Вас не научили оформлять код тегами CODE?

Такая оплошность с моей стороны больше не повторится )


з.Ы.Ы. А почему в полных именах классов отсутствует доменное имя, но есть зона?

я на флэше относительно недавно, поэтому способ, по которому я организую структуру программы скорей всего не самый рациональный. У меня в папке с fla-файлом находится папка com с файлами классов, используемых в данной конкретной программе. Вроде все работает )

etc
23.10.2006, 11:33
island, дело в том, что «com» используется только лишь в том случае, если требуется указать адрес сайта разработчика. А у вас же только доменная зона.

В принципе, кладите классы, куда хотите, но это несколько неправильно.