Показать сообщение отдельно
Старый 10.05.2017, 14:40
DeeMOONger вне форума Посмотреть профиль Отправить личное сообщение для DeeMOONger Найти все сообщения от DeeMOONger
  № 1  
Ответить с цитированием
DeeMOONger

Регистрация: Dec 2015
Сообщений: 5
По умолчанию FlashDevelop AS3 Загрузка изображения из сети

Здравствуйте!
Я новичок в программировании AS3. Возникла проблема. Скажу сразу: Да, я искал ответ на этом форуме, и да - находил разные варианты. Но, видимо, мой случай несколько уникален, потому и спрашиваю.

Работаю в FlashDevelop + Flex. Код привожу нужный, ненужное выкинул.

Есть основной код:

main.as

Код AS3:
package
{
  import flash.display.Sprite;
  import flash.events.Event;
  import flash.sampler.NewObjectSample;
 
  public class Main extends Sprite 
  {
    private var usrprofile : Profile;
    private var provider : Provider;
    private var srvdata : ServerData;
    private var loadscr : LoadingScreen;
    private var gameData : GameData;
 
    public function Main() 
    {
      if (stage) init();
      else addEventListener(Event.ADDED_TO_STAGE, init);
    }
 
    private function init(e:Event = null):void 
    {
      removeEventListener(Event.ADDED_TO_STAGE, init);
 
      gameData = new GameData();
      provider = new Provider( stage, gameData );
      srvdata = new ServerData( gameData );
      usrprofile = new Profile( srvdata, gameData );
      loadscr = new LoadingScreen();
      loadscr.isvisible = false;
 
      addEventListener(Event.ENTER_FRAME, newFrame );
    }
 
    private function newFrame(e:Event = null):void
    {
      switch( sceneid )
      {
        case scene_id_profile:
            addChild( usrprofile );
            usrprofile.Update();
          }
          break;
      }
    }
  }
 
}
Как видно, из него вызывается Update профиля.

profile.as

Код AS3:
package 
{
  public class Profile extends Sprite
  {
    private var gd:GameData;
 
    public function Profile( serv:ServerData, gamedata:GameData ) 
    {
      super();
 
      srvdata = serv;
      gd = gamedata;
    }
 
    public function Update():void
    {
      gd.LoadAva();
    }
}
Уже здесь вызывается функция загрузки аватарки игрока из класса GameData.

GameData.as

Код AS3:
package 
{
  import flash.display.Bitmap;
  import flash.display.BitmapData;
  import flash.events.*;
  import flash.display.Loader;
  import flash.display.LoaderInfo;
  import flash.display.Sprite;
  import flash.net.URLRequest;
 
  public class GameData extends Sprite
  {
    public var user_photo:String;
    public var user_ava:Bitmap;
 
    public var loader:Loader;
    private var url:URLRequest;
    private var bitmapData:Bitmap;
 
    public function GameData() 
    {
      user_photo = new String();
    }
 
    public function LoadAva():void
    {
      loader = new Loader;
      loader.contentLoaderInfo.addEventListener( Event.COMPLETE, onLoadComplete );
 
      url = new URLRequest( String("http://myweb.site/test.png") );
      loader.load( url );
      addChild(loader);
    }
 
    private function onLoadComplete(e:Event):void
    {
1:      bitmapData = e.target.loader.contentLoaderInfo.content as Bitmap;
2:      user_ava = new Bitmap( bmp.bitmapData );
    }
  }
 
}
Здесь я пронумеровал 2 строчки.

И вот она проблема: функция onLoadComplete обрывается на строке 1. Т.е. строка 2 не срабатывает, но при этом приложение работает, как ни в чем не бывало. Ни ошибок, ни Adobe FP Debug ничего не пишет. И в итоге изображения нет.

Пробовал строку 1 делать так:

Код AS3:
bitmapData = loader.contentLoaderInfo.content as Bitmap;
Результат тот же.

В чём проблема? Что я делаю не так?