Passando parâmetros para o construtor para uma classe de ativos criadas automaticamente AS3
-
22-08-2019 - |
Pergunta
Estou criando um MovieClip subclasse (vamos chamá-lo MyClip
) que deseja usar para vários recursos de biblioteca. Eu vou ser instanciar esses clipes de filme a partir do código do ActionScript. MyClip
tem um parâmetro de construtor que lhe permite definir os valores iniciais de determinadas propriedades.
Desde que eu quiser usá-lo para vários recursos de biblioteca, o caminho lógico para fazê-lo parece especificá-lo na caixa de "Base Class" texto na caixa de diálogo "Propriedades do símbolo". O problema é que as subclasses geradas automaticamente não têm o construtor com o parâmetro. Em vez disso, o Flash tenta gerá-los com apenas um construtor padrão, que também falha porque MyClip
não tem um construtor padrão.
Existe alguma maneira de contornar isso, além de adiar a inicialização de propriedade a um método normal?
Editar: eu não ter sido suficiente claro, vou tentar esclarecer aqui. Se esta é a classe MyClip
:
public class MyClip extends MovieClip
{
private var someValue : Number;
public function MyClip(someValue : Number)
{
this.someValue = someValue;
}
}
e eu especificado MyClip
como classe base para símbolo MyClipA na biblioteca, eu realmente gostaria de ser capaz de fazer clip = new MyClipA(17);
sem ter que escrever a classe MyClipA
mim mesmo.
Solução
Estou assumindo a razão que você precisa para criar MyClipA e MYClipB, etc classes é para anexar arte diferente para objetos que apenas têm os comportamentos de um objeto myClip?
Talvez você poderia abordá-lo de maneira diferente, faça a sua classe base - myClip como você ter o seu exemplo, aceitar 2 aruguments, uma das quais é uma referência para a arte:
public class MyClip extends MovieClip
{
public var art:ArtBaseClass
private var someValue : Number;
public function MyClip(someValue : Number, artClass:ArtBaseClass)
{
this.someValue = someValue;
this.art = new artClass();
this.addChild(art);
}
}
E você pode definir qualquer outra coisa que você precisa em um ArtBaseClass que é aplicada a cada uma dessas biblioteca de arte objetos.
Outras dicas
Eu não acho que isso pode realmente ser feito. Mas se isso pode ser feito, será adequadamente com o protótipo. Talvez você possa mudar o contructor de cada uma das classes padrão.
Tente especificar argumentos padrão para o construtor (null
como um valor especial, talvez?). Em seguida, adicione um pouco de verificação de erros no início do construtor que define padrões sensíveis para a sua MovieClip. É realmente hacky, mas tanto quanto eu sei que não é a melhor maneira de fazê-lo usando o drag & drop animar UI (você só pode fazê-lo através de código).
Se correu para isso também. A maneira correta de resolver isso é para criar classes para MyClipA e MyClipB que herdam myClip. Isso pode ser complicado se há grande quantidade de aulas que são baseados em myClip. Então, novamente, se for esse o caso, você pode querer começar a pensar em usar a composição em vez de herança de qualquer maneira.