Как расширить текстовое поле, которое уже находится на сцене во Flash (AS3)?
-
06-07-2019 - |
Вопрос
Я ищу способ расширить TextField, который уже находится на сцене во Flash (AS3) как то так:
public class ChildTextField extends TextField
{
//code for childTextField comes here
}
Я поместил TextField с именем экземпляра 'thetextfield' на сцену. Теперь я хотел бы сказать, Flash это текстовое поле имеет тип ChildTextField. Поэтому в моем классе документов я объявляю это текстовое поле как ChildTextField:
public class DocumentClass extends Sprite()
{
public var thetextfield : ChildTextField;
}
Это приводит к ошибке «Принудительное приведение типов». Можно ли изменить класс, используемый для текстового поля в IDE Flash, так же, как вы можете это сделать с символами библиотеки?
Решение
Не бойся. Вам придется использовать ActionScript, если вы хотите добавить расширенный класс текстового поля.
РЕДАКТИРОВАТЬ: есть способ взлома. источник: http://board.flashkit.com/board/ архив / index.php / т-738887.html
На самом деле, я столкнулся с этим точным проблема раньше. В моем случае я был пытаясь создать текстовое поле с дополнительные поведения для других некоторых других художники, не использующие кодировщик. я скажу Вы мое оригинальное решение, которое все as3, но имел роковой недостаток, и мой текущее решение, которое является сочетание as3 и jsfl.
Отличное решение as3, кроме для 2 вещей: во-первых, это происходит в время выполнения, а не время сборки. Тот означает, что есть небольшая, но реальная часть время, когда фильм не правильно инициализирован. Во-вторых, это не играть хорошо, если есть несколько кадры в фильме. Основная идея обнаружить текстовые поля, которые вы хотите изменить, построить вещи, чтобы заменить их с, а затем заменить их на сцене. Вы может сделать это с помощью расширения TextField, или создание класса, который содержит TextField и обрабатывает интерфейс к нему. Допустим, вы делаю первый. Добавить конструктор в SmartTextField, который копирует все поля, которые вас интересуют:
public function SmartTextField(TextField tf)
{
this.text = tf.text; //continue with copy of anything relevant.
}
в вашем основном фильме есть код, который обнаруживает и заменяет TextFields Вы хотите заменить
var toreplace:Array = findTextFields();
var tf:TextField;
var stf:SmartTextField;
var where:int;
for (int i = 0; i < toreplace.length;i++)
{ tf = TextField(toreplace[i]);
stf = new SmartTextField(tf);
where = getChildIndex(tf);
addChildAt(stf,where);
removeChild(tf);
}
Это отлично работает, кроме точек выше. р>
Решение JSFL слишком сложное перейти подробно, но вот основы. Иметь класс as3, который переносит текстовое поле с новым поведением вы хочу. Напишите скрипт jsfl, который перебирает выбранные элементы и если это текстовое поле, преобразуется в символ с базовым классом вашего нового класс обертки. Это имеет свои преимущества что это происходит во время автора, и такие вещи, как положение, имя экземпляра и другие вещи автоматически сохранились. Имеет недостаток что JSFL имеет много немного раздражает причуды, чтобы работать через.
edit: конечно, если это только для один фильм, вы могли бы отказаться от jsfl конвертер сценария, и просто сделайте это рукой. преобразовать в символ - > обертка BaseClass.