PDA

Просмотр полной версии : Использование TextFormat в классах


Korsar Nik
05.06.2008, 20:18
Есть такой вот класс (урезанный). В нём я хочу создать текстовое поле, задать ему TextFormat, присвоить некую переменную и в каждом кадре отслеживать изменение этой переменной. Не получается в классе задавать TextFormat. Подозреваю, что надо импортировать некий встроенный класс для текста, чтобы получить возможность использовать все его свойства и методы (как, например, с мувиком).
Пробовал задавать формат в руте, а в классе на него ссылаться. В таком случае класс компилится, поля создаются, но TextFormat не работает.
Классы только начал осваивать, советы типа "Иди читай то-то и то-то" приветствуются :))

import mx.utils.Delegate;
class Zig_game.Interface {
// Очки
public var _score:Number = null;
public var _scoreText = null;
public var _iface:MovieClip;
// Параметры текстовых полей для очков и континиусов
var my_fmt:TextFormat = new TextFormat();
my_fmt.color = 0xCBCBCB;
my_fmt.size = 10;
my_fmt.align = "center";
my_fmt.font = "Trebuchet MS";
// Конструктор
function Interface() {
_score = 0;
// Создаем текстовые поля под континиусы и очки
_scoreText = _root.createTextField("score_txt", 15006, 126, 11, 70, 15);
_scoreText.setTextFormat(my_fmt);
// Аттачим интерфейс, хп зига
_iface = _root.attachMovie("interface", "interface", 15001, {_x:0, _y:0});
updater();
}
function updater() {
_iface.onEnterFrame = Delegate.create(this, updateInterface);
}
function updateInterface() {
_scoreText.text = _score;
}
}

MrPoma
05.06.2008, 21:15
Во-первых, класс надо наследовать от MovieClip'а.

silin
05.06.2008, 21:22
или в конструкторе:
_scoreText.setNewTextFormat(my_fmt);

или в updateInterface :
_scoreText.text = _score;
_scoreText.setTextFormat(my_fmt);

tikhop
05.06.2008, 21:34
class Zig_game.Interface {
private var _iface:MovieClip;
private var _scoreTextField:TextField
private var my_fmt:TextFormat
private var _scoreText:Number
// Конструктор
function TextFormatClass() {
_scoreText=0
my_fmt = new TextFormat();
my_fmt.color = 0x010101;
my_fmt.size = 30;
my_fmt.align = "center";
my_fmt.font = "Arial";
_scoreTextField = _root.createTextField("score_txt", 15006, 126, 11, 70, 55)
updater();
}
function updater() {
_scoreTextField.text = String(_scoreText)
_scoreTextField.setTextFormat(my_fmt);
}
}

Korsar Nik
05.06.2008, 22:08
MrPoma,
Почему наследовать от Мувиклипа? Я думал об этом, но посчитал избыточным и просто неудобным в силу того, что проще аттачить 2 текстовых поля и 3 мувика (а именно столько мне надо) не в руте, а непосредственно в классе. Возможно, я чего-то не знаю, но создание экземпляра при подобном наследованим будет выглядеть как:
var iface:Interface = Interface(this.attachMovie("interface", "interface", _root.getNextHighestDepth(), {_x:x, _y:y});
Но только для одного клипа. Как сделать для большего количества я не знаю :))

Silin,
Видимо чего-то не хватает. При отладке ругается на задание свойств my_fmt: "This statement is not permitted in a class definition."

tikhop,
Спасибо, если немного адаптировать - всё работает.

Silin,
Пока разбирался с кодом от tikhop, понял главное, чего не хватало - объявления my_fmt как переменной типа TextFormat. Спасибо, тоже подходит.