Как расширить текстовое поле, которое уже находится на сцене во Flash (AS3)?

StackOverflow https://stackoverflow.com/questions/1617469

  •  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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top