2011-04-24 18 views
10

Tengo un elemento de la biblioteca actionscript 3, "BG", que está vinculado a la clase BGClass. BG contiene un Sprite que tiene un nombre de instancia, "bg" y, asimismo, BGClass tiene una propiedad pública bg. Entonces la clase se ve así:1152: Existe un conflicto con la definición heredada en el espacio de nombres público

public class BGCass extends Base { 

    public var bg:Sprite; 

    public function BGCass() { 
     bg.width = 200 
    } 
} 

Todo funciona bien. Pero si deseo mover el bg público a la clase Base de esta manera, obtengo el error.

public class BGCass extends Base { 
    public function BGCass() { 
     bg.width = 200 
    } 
} 

public class Base extends Sprite { 

    public var bg:Sprite; 

    public function Base() { 
    } 
} 

He intentado usar emisores de getter de la base y de la anulación en BGClass y todavía obtener el error. ¿Es esto un error en Flash? ¿Existe una solución limpia o necesito crear algún tipo de variable proxy para finalmente obtener bg en Base? Sé que apagar "declarar automáticamente instancias de escenario" en Flash eliminará el error, pero necesito mantenerlo para los diseñadores. Alguna solución?

+0

¿Tienes un clip de película que se llama BG? ¿Y su clase base es BGClass? ¿BGClass extiende Base? y el clip de película BG contiene un clip de película con un nombre de instancia de "bg"? Estoy pidiendo esto solo para asegurarme de que tengo la estructura correcta, que creo que puede utilizar algunas revisiones, junto con las revisiones de los nombres que ha elegido. – Taurayi

Respuesta

8

Tienes un par de opciones.

  1. Cambie el nombre de su variable "bg" o la instancia de escenario "bg" a otra cosa para que no coincidan.

  2. Si va a Archivo> Configuración de publicación ...> pestaña Flash y hace clic en el botón "Configuración ..." junto a Actionscript 3.0, verá una opción marcada de manera predeterminada con la etiqueta "Declarar instancias de escenario automáticamente" . Si deshabilita esta opción, el error que está viendo desaparecerá, aunque es posible que vea otros errores emergentes como resultado.

Si vas con la opción 2, creo que la variable se rellena automáticamente con una referencia a la instancia etapa, si deja sus nombres la misma.

Algunos antecedentes: cuando crea un elemento de biblioteca con una clase base, Flash crea una nueva clase detrás de las escenas que amplía la clase que ha elegido. De forma predeterminada, Flash está configurado para proporcionar a esa clase un conjunto de variables miembro que coinciden con los elementos secundarios que ha colocado dentro de MovieClip en el entorno de creación.

+0

Le doy al Sprite en BG un nombre de instancia de "fondo" (en lugar de "bg") y luego establezco bg = fondo en BGClass. Es un poco descuidado, pero parece ser la única solución."Declarar instancias de escenario automáticamente" no funcionará para mí porque necesito que mis scripts funcionen correctamente "Declarar instancias de escenario automáticamente" está configurado o no. Simplemente parece un error, ya que Flash no proporciona el error si bg está definido en la clase principal. El error solo aparece si bg está definido en el super. – Sunny

+0

-1 Esta respuesta es completamente incorrecta. Pondrá una respuesta en breve explicando. –

+2

Es extraño, porque su respuesta directamente sobre la suya indica que su problema se resuelve siguiendo mis consejos, aunque todavía no ha aceptado mi respuesta formalmente. –

-1

Lo que te estás olvidando de hacer es crear instancias del sprite bg. Todo lo que hiciste fue escribirlo en Sprite.
Básicamente, lo que está haciendo es tratar de acceder a un sprite nula

var bg:Sprite; 
bg.width // bg is null at this point 

var bg:Sprite; 
bg = new Sprite() 
//or 
var bg:Sprite = new Sprite() 

por lo que si una instancia que no tendrá el problema

public class Base extends Sprite { 

    public var bg:Sprite; 

    public function Base() { 
     this.bg = new Sprite(); 
    } 
} 

También el error con su código que ha publicado hace no se relaciona con el error que publicaste. así que esto es solo la mitad de tu problema si aún recibes el error después de hacer este cambio, házmelo saber.

+3

No necesita ser instanciado porque ya existe en el escenario. – Ethan

0

simplemente elimine BG de MovieClip extendido. BG viene a MovieClip extendido desde MovieClip base.

Cuestiones relacionadas