Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   область видимости (http://www.flasher.ru/forum/showthread.php?t=91301)

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 не видать. А надо.
Объясните, плиз, как в таком случае быть?

etc 29.01.2007 21:00

Скобки в первой строке лишние. Плюс необходим импорт класса Tween. Плюс внутри функции область видимости другая, нужно использовать Delegate.

silin 29.01.2007 21:25

если нужен доступ к объекту,который твиним, можно без делегирования обойтись: ссылка на него в свойстве obj твина хранится:
Код:

myTween.onMotionFinished = function()
{
  trace(this.obj);
}


etc 30.01.2007 00:06

Описывать метод в методе как-то криво совершенно :)

silin 30.01.2007 00:39

криво смотрится, ты хотел сказать?
можно подумать что c помощью Delegate прямее..:)
хотя удобнее, спору нет..

etc 30.01.2007 01:17

Delegate хотя бы не изменяет область видимости лишний раз. И FDT спокоен.

funkyDevil 30.01.2007 13:12

delegate значит говорите....буду капать в этом направлении. Спасибо за наводку :)

etc 30.01.2007 13:44

Цитата:

Сообщение от silin
криво смотрится, ты хотел сказать?

Не только, объявление методов внутри другого противоречит ООП. 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?

silin 30.01.2007 14:43

myClip1 должен быть не MovieClip, а к примеру MyClip1 extends MovieClip
тогда свойство myClip2:MovieClip он сможет иметь на законных основаниях..

а успокоить можно и Flex2, тока я не буду здесь об этом, а то _etc сильно ругается...:)

funkyDevil 30.01.2007 15:05

Это чё? Отдельный мини-класс писать чтоли для myClip1? Как то это не спортивно :) Помоему проще не реагировать на сообщения FDT.

а _etc конечно строгий, но справедливый! :)

etc 30.01.2007 15:40

Не должно быть более одного уровня вложенности в одном классе.
в конце концов, можно пользовать:

Код:

var mc1:MovieClip = this.createEmptyMovieClip('mc1',0);
var mc2:MovieClip = mc1.createEmptyMovieClip('mc2',0)

Без прямых обращений. Или действовать по принципу XMLNode и свойствам nextSibling/prevSibling, тогда FDT даже не пикнет при десятке уровней вложенности.

funkyDevil 30.01.2007 15:56

Цитата:

Сообщение от __etc
Не должно быть более одного уровня вложенности в одном классе.

хм..а как же быть, если я программно рисую мувик и на нём делаю текстовое поле?


Цитата:

Сообщение от __etc
Без прямых обращений. Или действовать по принципу XMLNode и свойствам nextSibling/prevSibling, тогда FDT даже не пикнет при десятке уровней вложенности.

вот в это я вообще не въехал. Не могу понять как принцип XML на структуру моих мувиков перенести. Если будет время - распиши плиз чуть подробнее.

etc 30.01.2007 16:01

Цитата:

Сообщение от funkyDevil
хм..а как же быть, если я программно рисую мувик и на нём делаю текстовое поле?

Этот мувик должен быть отдельным классом, у которого есть свойство с текстовым полем. Или опять же, пользовать ссылки.

Цитата:

вот в это я вообще не въехал. Не могу понять как принцип XML на структуру моих мувиков перенести. Если будет время - распиши плиз чуть подробнее.
По принципу parent/child, но я бы не стал так делать.

funkyDevil 30.01.2007 16:26

ок. Спасибо за идею с ссылками.


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

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