Как расширить текстовое поле, которое уже находится на сцене во Flash (AS3)? - PullRequest
1 голос
/ 24 октября 2009

Я ищу способ расширить 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, так же, как вы можете использовать символы библиотеки?

1 Ответ

1 голос
/ 24 октября 2009

Не бойся. Вам придется использовать ActionScript, если вы хотите добавить расширенный класс текстового поля.

РЕДАКТИРОВАТЬ: есть способ взлома. источник: http://board.flashkit.com/board/archive/index.php/t-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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...