Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 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;
Результат тот же.

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

Старый 10.05.2017, 15:08
FlashRus вне форума Посмотреть профиль Отправить личное сообщение для FlashRus Найти все сообщения от FlashRus
  № 2  
Ответить с цитированием
FlashRus
 
Аватар для FlashRus

Регистрация: Nov 2006
Адрес: СПб
Сообщений: 921
Отправить сообщение для FlashRus с помощью ICQ Отправить сообщение для FlashRus с помощью Skype™
1. В e.target в методе onLoadComplete лежит ссылка на LoaderInfo, так-что бегать туда-сюда (e.target.loader.contentLoaderInfo...) смысла нет. Достаточно сделать:
Код AS3:
bitmapData = ((event.target as LoaderInfo).content as Bitmap).bitmapData;
Ну и по хорошему, всё-же должно быть так:
Код AS3:
bitmapData = (loader.contentLoaderInfo.content as Bitmap).bitmapData;
2. Вторая строка вообще никак не связана с первой т.к. в ней используется свойство bitmapData какого-то bmp, который в GameData даже не объявлен.

Старый 10.05.2017, 18:12
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 3  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Цитата:
Сообщение от FlashRus Посмотреть сообщение
1. В e.target в методе onLoadComplete лежит ссылка на LoaderInfo, так-что бегать туда-сюда (e.target.loader.contentLoaderInfo...) смысла нет. Достаточно сделать:
Код AS3:
bitmapData = ((event.target as LoaderInfo).content as Bitmap).bitmapData;
Ну и по хорошему, всё-же должно быть так:
Код AS3:
bitmapData = (loader.contentLoaderInfo.content as Bitmap).bitmapData;
2. Вторая строка вообще никак не связана с первой т.к. в ней используется свойство bitmapData какого-то bmp, который в GameData даже не объявлен.
Оба предложенных варианта не сработают, потому что переменная называется bitmapData, но тип при этом объявлен как Bitmap (это не одно и тоже, bitmapData - это основа, из которой делаются объекты Bitmap, если так будет понятнее). Все это отвалится ещё на этапе компиляции

Во-первых, советую проверять типы в документации. Нужно переименовать (чтоб не путаться)
Код AS3:
 private var bitmapData:Bitmap;
в
Код AS3:
 private var bitmapData:BitmapData;
Ну а дальше уже как написал FlashRus
__________________
Ко мне можно и нужно обращаться на ты)

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

Регистрация: Dec 2015
Сообщений: 5
Ага, спасибо! Вы правы и я был прав - делал также (просто код уже переломанный выложил).
Проблема оказалась грустнее - с локального сервера грузит, а с реального из интернета - нет. Не с протокола http, не с https. Есть рецепт?

Старый 10.05.2017, 19:19
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 5  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
все дело в файле crossdomain.xml, который должен лежать в корне нужного домена, и разрешать загрузку для флешки, лежашей на указанном домене, либо для всех флешек *
__________________
Ко мне можно и нужно обращаться на ты)

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

Регистрация: Dec 2015
Сообщений: 5
На моём сайте такой лежит. Т.е. получается, что если я захочу слизнуть во флеш изображение, то придется юзать php-прокладку на своём сайте между флеш и сторонним сайтом? А напрямую никак-никак совсем? Всё ясно...
Ладно, в любом случае, всем огроменное спасибо за помощь и консультации!
Креатива всем!

Добавлено через 15 минут
Добавляю: при выгрузке флеш в ВК всё заработало. А в режиме теста на локальной машине не грузит из ВК. Стрёмно так разработочку вести...

Старый 11.05.2017, 07:18
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 7  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Цитата:
Добавляю: при выгрузке флеш в ВК всё заработало. А в режиме теста на локальной машине не грузит из ВК. Стрёмно так разработочку вести...
У тебя точно отладочный плеер установлен? Отладочному должны быть пофиг все эти политики
__________________
Ко мне можно и нужно обращаться на ты)

Создать новую тему Ответ Часовой пояс GMT +4, время: 19:36.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 19:36.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.