Почему этап не определен в моем классе Actionscript 3, хотя я импортировал класс Stage? - PullRequest
3 голосов
/ 12 января 2010
 package    {

 import flash.display.Stage;

 public class MyGlobal {

  public static  var CX:Number = stage.stageWidth / 2;
  public static  var CY:Number = stage.stageHeight / 2;  

 }

}

Ошибка: "1120: Access of undefined property stage." ПОЧЕМУ?

Ответы [ 4 ]

9 голосов
/ 12 января 2010

Как уже упоминалось, stage - это свойство классов, которые наследуются от DisplayObject. Этап недоступен классу до тех пор, пока он не будет добавлен на этап, как правило, с помощью метода addChild объекта DisplayObjectContainer.

3 голосов
/ 12 января 2010

Свойство stage доступно только для отображения объектов, добавленных на сцену. Ваш класс не наследуется от DisplayObject, поэтому свойство stage для вашего класса не существует. Даже если ваш класс наследовал от DisplayObject, его необходимо добавить на сцену с помощью addChild () из родительского экранного объекта.

Если ваш класс не предназначен для отображения на экране, но ему нужен объект сцены для измерений или других свойств, отправьте его в качестве аргумента в конструктор.

В противном случае, сделайте так, чтобы ваш класс наследовал DisplayObject, затем вам нужно добавить прослушиватель событий, когда объект добавляется на сцену:

addEventListener(Event.ADDED_TO_STAGE, onAddedToStage);

В методе onAddedToStage () теперь доступна стадия (РЕДАКТИРОВАТЬ: свойство стадии будет доступно до тех пор, пока самый верхний родительский контейнер был добавлен к стадии).

1 голос
/ 02 октября 2011

Я решил это, пройдя этап Object ссылаясь на конструктор класса. Мне, честно говоря, не нравится решение, потому что вы должны пройти этап, но это самый простой способ, который я видел.

это то, что я сделал в конструкторе:

public function Ball(b:Object,stageRef:Object)
{
    ballObject = b;
    speed = 10;
    stageRef.addEventListener(KeyboardEvent.KEY_DOWN,function(e:KeyboardEvent):void{
        currentKeyCode = e.keyCode; 
    });
    stageRef.addEventListener(KeyboardEvent.KEY_UP,function(e:KeyboardEvent):void{
        currentKeyCode = 0;   
    });
}
0 голосов
/ 12 января 2010

Ответ от Сэма на самом деле совершенно правильный.Самое простое объяснение состоит в том, что stage является экземпляром, а не членом класса.

Если бы ваши поля не были объявлены статическими, вы могли бы получить доступ к этапу.Но вы, вероятно, получите ошибку нулевой ссылки;)

...