PDA

Просмотр полной версии : Обращение к свойству класса


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

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 (http://help.adobe.com/ru_RU/FlashPlatform/reference/actionscript/3/flash/utils/Dictionary.html). Например, добавить в класс Main статический словарь и в конструкторе добавлять в него ссылки на текстовое поле и спрайт по соответствующим ключам.

// Вот оно хранилище ссылок
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 (если кликнули по спрайту) и сделать так:

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
да ну бред какойто, зачем тебе класс если у тебя все переменые обьявлены публично и как ты их добовляешь на сцену непонятно
наверно ты имеешь ввиду следующее

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;
}

}

}


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


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

bav
22.04.2013, 19:48
29438