Просмотр полной версии : область видимости
funkyDevil
29.01.2007, 20:44
К примеру у меня вот такой класс:
class MyClass(){
private myTween:Tween;
private myObject:Object;
public function MyClass()
{
myTween = new Tween(бла-бла-бла);
myTween.onMotionFinished = function()
{
trace(myObject);
}
}
}
В результате trace выводит undefined. Т.е. переменные моего класса изнутри обработчика onMotionFinished не видать. А надо.
Объясните, плиз, как в таком случае быть?
Скобки в первой строке лишние. Плюс необходим импорт класса Tween. Плюс внутри функции область видимости другая, нужно использовать Delegate.
если нужен доступ к объекту,который твиним, можно без делегирования обойтись: ссылка на него в свойстве obj твина хранится:
myTween.onMotionFinished = function()
{
trace(this.obj);
}
Описывать метод в методе как-то криво совершенно :)
криво смотрится, ты хотел сказать?
можно подумать что c помощью Delegate прямее..:)
хотя удобнее, спору нет..
Delegate хотя бы не изменяет область видимости лишний раз. И FDT спокоен.
funkyDevil
30.01.2007, 13:12
delegate значит говорите....буду капать в этом направлении. Спасибо за наводку :)
криво смотрится, ты хотел сказать?
Не только, объявление методов внутри другого противоречит ООП. Delegate в купе с EventDispatcher в AS2 приближают к реализации подобного в AS3.
funkyDevil
30.01.2007, 14:32
С delegate разобрался и пожалел, что не наткнулся на него раньше :)
Назрел вопросик о ругани FDT.
к примеру есть такой вот код:
var myClip1:MovieClip;
_root.createEmptyMovieClip("myClip1",1000);
_root.myClip1.createEmptyMovieClip("myClip2",1000);
_root.myClip1.myClip2.onPress = function(){бла-бла-бла}
Дык вот када я описываю обработчик onPress, то FDT ругается на то, что он не знает что такое myClip2. Это вообщем-то естественно, учитывая, что в var я его не прописывал.
Конструкцию var myClip1.myClip2:MovieClip флэш не понимает.
Может есть какие-нибудь другие способы успокоить FDT?
myClip1 должен быть не MovieClip, а к примеру MyClip1 extends MovieClip
тогда свойство myClip2:MovieClip он сможет иметь на законных основаниях..
а успокоить можно и Flex2, тока я не буду здесь об этом, а то _etc сильно ругается...:)
funkyDevil
30.01.2007, 15:05
Это чё? Отдельный мини-класс писать чтоли для myClip1? Как то это не спортивно :) Помоему проще не реагировать на сообщения FDT.
а _etc конечно строгий, но справедливый! :)
Не должно быть более одного уровня вложенности в одном классе.
в конце концов, можно пользовать:
var mc1:MovieClip = this.createEmptyMovieClip('mc1',0);
var mc2:MovieClip = mc1.createEmptyMovieClip('mc2',0)
Без прямых обращений. Или действовать по принципу XMLNode и свойствам nextSibling/prevSibling, тогда FDT даже не пикнет при десятке уровней вложенности.
funkyDevil
30.01.2007, 15:56
Не должно быть более одного уровня вложенности в одном классе.
хм..а как же быть, если я программно рисую мувик и на нём делаю текстовое поле?
Без прямых обращений. Или действовать по принципу XMLNode и свойствам nextSibling/prevSibling, тогда FDT даже не пикнет при десятке уровней вложенности.
вот в это я вообще не въехал. Не могу понять как принцип XML на структуру моих мувиков перенести. Если будет время - распиши плиз чуть подробнее.
хм..а как же быть, если я программно рисую мувик и на нём делаю текстовое поле?
Этот мувик должен быть отдельным классом, у которого есть свойство с текстовым полем. Или опять же, пользовать ссылки.
вот в это я вообще не въехал. Не могу понять как принцип XML на структуру моих мувиков перенести. Если будет время - распиши плиз чуть подробнее.
По принципу parent/child, но я бы не стал так делать.
funkyDevil
30.01.2007, 16:26
ок. Спасибо за идею с ссылками.
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.