Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Обращение к свойству класса (http://www.flasher.ru/forum/showthread.php?t=198213)

Srednas 22.04.2013 10:26

Обращение к свойству класса
 
Здравствуйте.
Подскажите, как можно сделать следующее.
Допустим, есть класс, который содержит в себе две переменные.
Код AS3:

public class Main
{
                public var tf:TextField = new TextField();
                public var sp:Sprite = new Sprite();
...

Затем добавляем выбираем несколько экземпляров класса Main, и добавляем на сцену некоторые TextField и Sprite. К примеру, слева список, справа графика.
Вопрос: можно ли как-нибудь обращаться к «родному» спрайту при клике по текстФилду или наоборот, при клике на спрайте, получить нужный текстФилд?

bav 22.04.2013 10:50

Можно воспользоваться классом Dictionary. Например, добавить в класс Main статический словарь и в конструкторе добавлять в него ссылки на текстовое поле и спрайт по соответствующим ключам.
Код AS3:

// Вот оно хранилище ссылок
public static var dict:Dictionary = new Dictionary();
// Вот он конструктор
public function Main() {
  ...
  tf = new TextField();
  sp = new Sprite();
  dict[ tf ] = sp;
  dict[ sp ] = tf;
  ...
}

После этого можно будет в обработчике события клика, достать e.currentTarget, привести его к Sprite (если кликнули по спрайту) и сделать так:
Код AS3:

var sp:Sprite = e.currentTarget as Sprite;
if (sp) {
  var tf:TextField = Main.dict[ sp ] as TextField;
  if (tf)
    // do something
}

И наоборот.

chamele0n 22.04.2013 14:44

да ну бред какойто, зачем тебе класс если у тебя все переменые обьявлены публично и как ты их добовляешь на сцену непонятно
наверно ты имеешь ввиду следующее
Код AS3:

package  {
 
        import flash.display.MovieClip;
        import flash.text.TextField;
        import flash.display.Sprite;
        import flash.events.MouseEvent;
 
 
        public class Main extends MovieClip {
 
                private var tf:TextField;
                private var sprite:Sprite;
 
                public function Main() {
                        tf = new TextField();
                        tf.addEventListener(MouseEvent.CLICK, onTextFieldClick);
                        addChild(tf);
 
                        sprite = new Sprite();
                        sprite.addEventListener(MouseEvent.CLICK, onSpriteClick);
                        addChild(sprite);
                }
 
                protected function onTextFieldClick(e:MouseEvent) : void {
                        //например
                        sprite.x += 100;
                }
 
                protected function onSpriteClick(e:MouseEvent) : void {
                        //например
                        tf.x += 100;
                }
 
        }
 
}

ну и сооветственно создаем экземплятор

Код AS3:

var main:Main = new Main();
addChild(main);


bav 22.04.2013 19:48

Вложений: 1
Вложение 29438


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

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