У вас есть пара проблем.Первое: чтобы вызвать статический метод, вы должны обратиться к классу.
Bus.addBus();
Это позволяет флэш-памяти знать, что вы имеете в виду статический метод класса шины, а не метод с именем "addBus ()" в классе Main.
Во-вторых, вваш метод Bus.addBus () вы ссылаетесь на нестатические переменные.Это может вызвать проблемы.В частности, вы ссылаетесь на объект stage, который будет нулевым, потому что нет статического этапа.Вместо этого вам нужно будет либо передать ссылку на сцену, либо вы можете вернуть новую шину из функции и позволить вызывающему классу добавить ее в список отображения соответствующим образом.
Я бы рекомендовал второй подход.
Кроме того, у вас могут быть дальнейшие планы для статического метода addBus ().Но я хотел бы отметить, что вы можете легко реализовать эту функциональность с помощью конструктора следующим образом:
package
{
import flash.display.Sprite;
import flash.events.Event;
import flash.display.Stage;
public class Bus extends Sprite
{
public function Bus(stageReference:Stage)
{
this.x = stageReference.stageWidth / 2;
this.y = stageReference.stageHeight / 2;
stageReference.addChild(bus); // This is kind of bad form. Better to let the parent do the adding.
}
}
}
====================================================
Редактирует в ответ на комментарий
В ActionScript,статические методы являются исключением, а не правилом.Таким образом, чтобы создать шину, вы должны изменить свой код следующим образом.Комментарии объясняют код.
package
{
import Bus;
import flash.display.Sprite;
import flash.events.Event;
import flash.display.Stage;
public class Main extends Sprite
{
public function Main()
{
// Add a new member variable to the Main class.
var bus:Bus = new Bus();
// we can call methods of our Bus object.
// This imaginary method would tell the bus to drive for 100 pixels.
bus.drive(100);
// We would add the bus to the display list here
this.addChild(bus);
// Assuming we have access to the stage we position the bus at the center.
if(stage != null){
bus.x = stage.stageWidth/2;
bus.y = stage.stageHeight/2;
}
}
}
}
Так вы создаете экземпляр своего класса и получаете к нему доступ без каких-либо статических методов.Ключевое слово «new» фактически является ярлыком для вызова метода конструктора класса и возвращает новый экземпляр класса.Родитель, который вызывает «new», имеет этот экземпляр как дочерний и имеет доступ к вызову всех своих открытых методов и свойств.