2010-04-21 11 views
5

El problema que he encontrado es que estoy usando un keyboardEventListener para hacer que un clip de película se ejecute. Como soy un estudiante universitario, estoy creando esto para una tarea, pero estamos obligados a utilizar as3 clases.Cómo acceder al escenario desde una clase AS3 en Adobe Flash

Cuando ejecuto el código en la línea maintimeline, no hay ningún problema. Pero cuando trato de acceder desde otra clase (con una 'Exportar para ActionScript' en el clip de película en cuestión) me sale un error que no puede abordar el escenario.

this.stage .addEventListener (KeyboardEvent.KEY_DOWN, dostuff);

Respuesta

9

Una clase en AS3 no está en el escenario hasta que realmente la coloque allí. Como resultado, "this.stage" será nulo en el momento de la compilación. Puede solucionar este problema utilizando el evento ADDED_TO_STAGE para retrasar el enlace de sus oyentes hasta que llegue el momento.

public function MyClass(){ 
    this.addEventListener(Event.ADDED_TO_STAGE, addedToStageHandler); 
} 

private function addedToStageHandler(e:Event):void{ 
    this.stage.addEventListener(KeyboardEvent.KEY_DOWN, dostuff); 
} 
+0

¡Alrgiht! He resuelto el problema de la etapa. Aun así, tengo algunos errores. Estoy recibiendo el error que no puede encontrar el teclado y cada error se encuentra en el siguiente tipo de código "si (== evt.keyCode Keyboard.RIGHT) {// cosas }" la el error es el siguiente: "1120: acceso de propiedad no definida Teclado". ¡gracias por resolver lo del escenario!Busqué en Google pero no encontré nada relevante. – Graphithy

+0

@Graphithy si tiene una pregunta diferente, haga una nueva pregunta sobre stackoverflow en lugar de preguntarlo en un comentario. – davr

0

"1120:. El acceso de teclado propiedad no definida No es tu respuesta No ha definido las propiedades de teclado que significa que no ha importado al paquete

debería ser algo como esto... :

import flash.display.*; 
import flash.events.*; 
import flash.ui.*; 

Consejo:. tienen una mirada más profunda en la importación trate de usar constructor de flash, es mucho mejor para los principiantes y clases de importación de automóviles por lo que u no necesita memorizar Everythi ng.

0

esta respuesta me ha ayudado un millón de veces, pero todavía no tengo suficientes puntos para mostrarla, o lo haría.

Esto sucede genéricamente cuando intenta acceder a cualquier elemento en el escenario antes de que se agregue al escenario. Estuve, durante un tiempo, usando un init() en el constructor de todas las clases principales de mis proyectos, pero debido a este problema, ya no lo hago. Ahora, en vez he reemplazado con esta (donde es el principal constructor de la clase/nombre):

public function Main():void { 
    this.addEventListener(Event.ADDED_TO_STAGE, init); 
    super();  
} 
... 
private function init(e:Event):void { 
... 

espero que esto ayude a otra persona que ha leído ninguna de los libros que hice en Flash, que ofrecen el init() idea.

And..thanks Greg W.

0

Al crear la clase que tiene que hacer referencia al escenario desde el interior de su clase coz no es accesible en todo el mundo tiene que pasar en la clase, y aquí es un ejemplo de usa el oyente de eventos de escenario dentro de una clase.

package { 
    import flash.events.KeyboardEvent; 

    public class Eventhndl{ 

     private var obj:Object; //create local variable to refarance stage 


     public function Eventhndl(objStage:Object):void{ 
      obj = objStage; //make local refarance for stage inside the class 

      obj.addEventListener(KeyboardEvent.KEY_DOWN,runit); //add the event listener 
     } 

     private function runit(Event:KeyboardEvent):void{ 
      trace("keyDownHandler: " + Event.keyCode); 
      trace("ctrlKey: " + Event.ctrlKey); 
      trace("keyLocation: " + Event.keyLocation); 
      trace("shiftKey: " + Event.shiftKey); 
      trace("altKey: " + Event.altKey); 
     } 
    } 

} 

guardar el archivo como Eventhndl.as y ahora sólo se puede añadir la instancia de esta clase y pasar a cualquiera que sea el objeto que es necesario escuchar su caso, aquí es cómo hacerlo.

import Eventhndl; 

var EH:Eventhndl = new Eventhndl(stage); 
Cuestiones relacionadas