2015-12-13 4 views
-1

Я пытаюсь создать простое меню в AS3. Есть спрайт под названием startButton, который при нажатии вызывает functionstartGame, и все! Но, не так просто. Я использую flashdevelop IDE, поэтому я пытаюсь позвонить loader, чтобы получить файл изображения .png для spitestartButton. Но это не сработает. Нет сообщений об ошибках, отладчик просто не отвечает. Любая помощь? Вот код для обоих файловОтладчик AS3 перестает отвечать при попытке загрузить изображение в спрайт с помощью Loader

Основной код:

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); 

    } 
} 

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

+0

Поместите скобки вокруг блоков 'if'-'else'. – Brian

+0

Во-первых, по умолчанию они не должны быть скобками для этих конкретных утверждений. Два, отлично, если функция оператора if не имеет скобок, это не вызовет ошибок. Это даже не обязательно считается лучше. Пожалуйста, комментарий только в том случае, если это полезно для моей проблемы. –

+0

Более склонны к ошибкам опустить фигурные скобки. Может быть, завтра вам нужно добавить второго слушателя событий в случае 'else' - oops, вы забыли добавить фигурные скобки; теперь он добавляется, нужно ли это или нет. Что касается не комментирования ... вы тот, кто разместил вашу проблему на общедоступном веб-сайте. Не жалуйтесь, что ответы вам не по душе. – Brian

ответ

2

Проблема в том, что вы злоупотребляете статическими. все статические методы/свойства инициализируются перед самими классами. В результате статические могут принимать значения, но они не могут запускать какой-либо код. Запуск кода должен произойти после того, как все классы готовы к работе, а это не так, когда статические инициализируются. В вашем случае startButton и загрузчик создаются правильно, но на следующей строке никогда не запускается loader.load.

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

+0

Спасибо, я понял, что статично делает и используется, но я просто был немного «ленив»;) Спасибо, хотя! –