Pergunta

Eu estou procurando uma maneira de estender um TextField que é allready no palco do Flash (AS3) algo como isto:

public class ChildTextField extends TextField 
{
    //code for childTextField comes here    
}

Eu coloquei um TextField com nome de instância 'thetextfield' no palco. Agora eu gostaria de dizer-flash de este campo de texto é do tipo ChildTextField. Então, na minha Document Classe Declaro que textfield como um ChildTextField:

public class DocumentClass extends Sprite()
{
    public var thetextfield : ChildTextField;
}

Isso gera um erro de falha Tipo de coerção. É possível alterar a classe que é usado para um campo de texto no IDE Flash como você pode fazer com símbolos da biblioteca?

Foi útil?

Solução

Com medo não. Você terá que usar o ActionScript, se você deseja adicionar a sua classe campo de texto estendida.

EDIT: há uma maneira hack. fonte: http://board.flashkit.com/board/ arquivo / index.php / t-738887.html

Na verdade, eu tenho que correr para esta exata problema antes. No meu caso, eu estava tentando criar um campo de texto com comportamentos adicionais para outras algum outro artistas não-codificador de usar. Eu irei dizer você minha solução original, que é tudo as3, mas tinha uma falha fatal, e meu solução actual, que é uma combinação de AS3 e jsfl.

A solução tudo AS3 é grande, exceto para 2 coisas: Em primeiro lugar, isso acontece em tempo de execução ao invés de construir-time. Este significa que há uma pequena mas real porção de tempo em que o filme não é corretamente inicializado. Em segundo lugar, ele faz não jogar bem se existem múltiplos quadros no filme. A idéia básica é para detectar os TextFields você deseja mudança, construir coisas para substituí-los com, em seguida, substituí-los no palco. Vocês pode fazer isso com qualquer estendendo TextField, ou a construção de uma classe que contém um TextField e lida com a interface para isso. Vamos dizer que você está fazendo o primeiro. Adicionar um construtor para SmartTextField que copia todo o campos que se preocupam com:

public function SmartTextField(TextField tf)
{
this.text = tf.text; //continue with copy of anything relevant. 
}

em seu filme principal tem o código que detecta e substitui os campos de texto que pretende substituir

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

Esta multa funciona, exceto para os pontos acima.

A solução JSFL é um pouco demasiado complexo para passar por cima em detalhes, mas aqui está o Fundamentos. Possui uma classe AS3 que wraps um campo de texto com o novo comportamento que você quer. Escrever um script jsfl que itera sobre os itens selecionados, e se é um campo de texto, converte em um símbolo com um baseclass do seu novo classe de mensagens publicitárias. Isto tem as vantagens que acontece em tempo de autor e coisas como posição, instancename e outras coisas é automaticamente preservado. Tem a desvantagem que jsfl tem um monte de pouco chato peculiaridades para trabalhar.

edit: Claro, se este é apenas por um único filme, você poderia renunciar ao roteiro conversor jsfl, e apenas fazê-lo à mão. Converter em símbolo -> invólucro baseclass.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top