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.

Foi útil?

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.

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