AS3 调试器在尝试使用 Loader 将图像加载到 sprite 时停止响应

AS3 debugger stops responding while trying to load image into sprite using Loader

我正在尝试在 AS3 中创建一个简单的菜单。有一个名为 startButton 的精灵,当按下它时会调用 function startGame,就是这样!但是,没那么容易。我正在使用 flashdevelop IDE,所以我试图调用 loader 来获取 spite startButton.png 图像文件。但是,它不起作用。没有错误消息,调试器只是没有响应。有什么帮助吗?这是两个文件的代码

主要代码:

package {

    //Other Files
    import Menu;

    import flash.display.Bitmap;
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.events.MouseEvent;
    import flash.ui.Mouse;

    public class Main extends Sprite {

        //Game values
        public static var gameWidth:int = 750;
        public static var gameHeight:int = 750;

        public function Main() {
            if (stage) init();
            else addEventListener(Event.ADDED_TO_STAGE, init);

            addChild(Menu.startButton);
            Menu.startButton.addEventListener(MouseEvent.CLICK, startGame);
            stage.addEventListener(Event.ENTER_FRAME, update);
        }

        private function init(e:Event = null):void {
            removeEventListener(Event.ADDED_TO_STAGE, init);
            // entry point
        }

        //Function starts game
        public function startGame(evt:MouseEvent):void {
            removeChild(Menu.startButton);
        }

        //Updates every 60 seconds
        public function update():void {
            trace("Updated");
        }

    }

}

和菜单图片代码:

package {

    //Other files
    import Main;

    import flash.display.Loader;
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.net.URLRequest;

    public class Menu extends Sprite {

        public static function imageLoaded():void {
            startButton.addChild(loader);

            //initizlize values for startButton Bitmap
            startButton.x = (Main.gameWidth / 2) - (startButton.width / 2);
            startButton.y = (Main.gameHeight / 2) - (startButton.height / 2);
        }

        //create startButton Bitmap
        public static var startButton:Sprite = new Sprite();
        public static var loader:Loader = new Loader();
        loader.load(new URLRequest("lib/menustartbutton.png"));
        loader.addEventListener(Event.COMPLETE, imageLoaded);

    }
}

顺便说一句,我在使用它之前等待加载程序成功加载图像,以防图像花费更多时间并绘制错误。

问题是你误用了static。所有静态 methods/properties 都在 类 本身之前初始化。因此 static 可以接收值,但它们不能 运行 任何代码。 运行 代码必须在所有 类 准备就绪之后发生,而静态初始化时情况并非如此。在您的情况下,startButton 和 loader 已正确创建,但下一行永远不会 运行s 'loader.load'.

不要滥用 static,你显然是在尝试使用 static 让你的代码编写和生活更轻松,但最终因为你滥用它,你总是会遇到更多问题。