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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 22.02.2012, 19:27
s3dworld вне форума Посмотреть профиль Отправить личное сообщение для s3dworld Найти все сообщения от s3dworld
  № 1  
Ответить с цитированием
s3dworld

Регистрация: Apr 2010
Сообщений: 170
По умолчанию Картинка грузится, но не отображается

Всем доброго вечера!

Загружаю ВКонтакт файл Loader.swf и следом запускаю её. Loader.swf грузит с другого сервера Game.swf. Game.swf получает из ВКонтакта список друзей с установленной игрой и следом информацию о них. Важным параметром в информации для меня является адрес с картинкой. Через Loader я успешно загружаю эти картинки с сервера ВКонтакте. Получается что свойство loader.content у меня содержит Bitmap. И вот у меня есть у одного из классов функция:

Код AS3:
public function SetPhoto(_bitmapData:BitmapData):void
{
	while(imageFriend.numChildren) imageFriend.removeChildAt(0);
 
	var bitmap:Bitmap=new Bitmap(_bitmapData);
 
	bitmap.smoothing=true;
	bitmap.width=48;
	bitmap.height=48;
 
	imageFriend.addChild(bitmap);
	isFriend=true;
}
И вот я как передаю в неё свою картинку:

Код AS3:
SetPhoto((loader.content as Bitmap).bitmapData);
При этом игра не работает. Чисто код останавливается. А если закомментировать всего одну строчку:

Код AS3:
//SetPhoto((loader.content as Bitmap).bitmapData);
То всё работает, только фото не выводится. Как так может быть? Ведь картинки успешно загружены, но возникает ошибка при их добавлении к Sprite в ребёнки.

Старый 22.02.2012, 19:34
maxkar вне форума Посмотреть профиль Отправить личное сообщение для maxkar Найти все сообщения от maxkar
  № 2  
Ответить с цитированием
maxkar

Регистрация: Nov 2010
Сообщений: 497
Как картинку грузите? checkPolicyFile==false? Если да, то доступа к точкам и не дадут. Можно либо установить checkPolicyFile в loaderContent, либо сам Loader выводить.

Старый 22.02.2012, 19:42
s3dworld вне форума Посмотреть профиль Отправить личное сообщение для s3dworld Найти все сообщения от s3dworld
  № 3  
Ответить с цитированием
s3dworld

Регистрация: Apr 2010
Сообщений: 170
maxkar
Цитата:
Как картинку грузите?
Картинку гружу вот так:

Код AS3:
loader.load(new URLRequest(url),new LoaderContext(true));
Когда запускаю локально Loader.swf (то есть не из под ВКонтакта), то выводит ошибку:

Цитата:
SecurityError: Error #2123: Нарушение изолированной среды: Loader.content: http://????/Game.swf?1329925221444 не может осуществить доступ к http://cs5504.vk.com/????/????/????.jpg. Не предоставлен доступ к файлам политики.
at flash.display::Loader/get content()
Ну это и понятно, всё таки запускаю не из домена ВКонтакте. А когда запускаю ВКонтакте, то происходит всё то же самое, только нет сообщения с ошибкой.

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

Регистрация: Nov 2010
Сообщений: 497
А Game.swf вы как грузите? Она в том же appdomain, что и Loader.swf или нет? Если в другом, значит правильно не дает. У контактовских серверов crossdomain разрешает только с их же серверов файлы грузит. Так что грузите Loader.swf в appdomain Game.swf

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

Регистрация: Apr 2010
Сообщений: 170
maxkar
Цитата:
А Game.swf вы как грузите?
Видимо не гружу. Всё что я делаю, так это в обеих swf:

Код AS3:
Security.allowDomain("*");
localConnection=new LocalConnection();
localConnection.allowDomain("*");
Цитата:
Так что грузите Loader.swf в appdomain Game.swf
Как мне это реализовать кодом?

Добавлено через 6 минут
Этот код не решил проблемы:

Код AS3:
gameLoader.load(
    new URLRequest("http://????/Game.swf?"+(new Date()).getTime().toString()),
    new LoaderContext(
        false,
        ApplicationDomain.currentDomain,
        SecurityDomain.currentDomain));
Добавлено через 18 минут
С выше показанным кодом вообще чёрный экран (похоже даже ресурсы с нашего сервера не может вывести), а вот с таким кодом карта показывается:

Код AS3:
gameLoader.load(
    new URLRequest("http://????/Game.swf?"+(new Date()).getTime().toString()),
    new LoaderContext(
        false,
        ApplicationDomain.currentDomain));
Но опять же, фото друзей не выводится, даже панель не появляется, так как там код стопорится из за вывода фото. Как делать?


Последний раз редактировалось s3dworld; 22.02.2012 в 19:55.
Старый 22.02.2012, 20:11
maxkar вне форума Посмотреть профиль Отправить личное сообщение для maxkar Найти все сообщения от maxkar
  № 6  
Ответить с цитированием
maxkar

Регистрация: Nov 2010
Сообщений: 497
Можно хак попробовать.

Кстати, вы уверены, что ошибка именно в том, что content достать не получается а не в самом методе установки картинки?

Старый 22.02.2012, 20:22
s3dworld вне форума Посмотреть профиль Отправить личное сообщение для s3dworld Найти все сообщения от s3dworld
  № 7  
Ответить с цитированием
s3dworld

Регистрация: Apr 2010
Сообщений: 170
maxkar
Цитата:
Кстати, вы уверены, что ошибка именно в том, что content достать не получается а не в самом методе установки картинки?
Уверен. Я когда запускаю Loader.swf не из ВКонтакта, то у меня загружаются и вставляются картинки с нашего сервера через тот самый метод. Я лишь подменяю картинки ВКонтактовские на свой (то есть адреса картинок).

Думаю хак не лучший способ. Множество людей же делают игры для ВКонтакта без всяких хаков. Проблема в чём-то другом. Что это может быть?

Старый 22.02.2012, 20:31
maxkar вне форума Посмотреть профиль Отправить личное сообщение для maxkar Найти все сообщения от maxkar
  № 8  
Ответить с цитированием
maxkar

Регистрация: Nov 2010
Сообщений: 497
Ну у меня, например, загрузка кода со своих серверов идет в ApplicationDomain.currentDomain и SecurityDomain.currentDomain. Еще и loadPolicyFile в true указывается (для кода, но вроде бы не нужно). А на своих серверах загрузка ресурсов разрешена со всех серверов. Все равно если кто-то контент решит утащить, он его и без crossdomain утащит. Адреса везде (в том числе - для своих ресурсов) - с адресом сервера. Для загрузки аватарок всего лишь установлен loadPolicyFile==true.

Хочу предупредить, что у контакта тоже не все гладко. Для "default" аватара он дает ссылку для которой нет правильной записи в crossdomain. И если вы все будете делать честно, доступа к контенту у человека, не загрузившего аватарку, вы все равно не получите.

Как вариант - многие могут просто Loader на сцену добавлять.

Старый 22.02.2012, 20:57
s3dworld вне форума Посмотреть профиль Отправить личное сообщение для s3dworld Найти все сообщения от s3dworld
  № 9  
Ответить с цитированием
s3dworld

Регистрация: Apr 2010
Сообщений: 170
maxkar
Цитата:
Как вариант - многие могут просто Loader на сцену добавлять.
У меня голова уже кругом. Решил так и сделать. Смотрите. У меня есть класс UsersLoad, в котором хранятся все эти Loader'ы с аватарками игроков. Каждый Loader связан с ID. Для получения контекста Loader'а есть метод GetData() с получаемым параметром ID.

Код AS3:
public function GetData(_userGameID:uint):DisplayObject
{
    // ...
}
Решил я в одном из классов, который унаследован от GUIEntity (а он в свою очередь от MovieClip), добавить этот Loader к себе (разумеется данные он уже загрузил):

Код AS3:
addChild(Game.usersLoad.GetData(userDesc.userGameID) as Bitmap);
Ну и результат таков:

- локальное рисунки с нашего сервера выводит;
- из под ВКонтакта его аватарки не выводит

Ну как так вообще может быть?

Старый 22.02.2012, 21:06
GBee вне форума Посмотреть профиль Отправить личное сообщение для GBee Найти все сообщения от GBee
  № 10  
Ответить с цитированием
GBee
 
Аватар для GBee

Регистрация: Jan 2009
Сообщений: 3,067
Записей в блоге: 3
Отправить сообщение для GBee с помощью Skype™
Цитата:
Думаю хак не лучший способ. Множество людей же делают игры для ВКонтакта без всяких хаков. Проблема в чём-то другом. Что это может быть?
Лично я юзаю :о) Не терплю все эти кроссдомены. Да и портировать в другие соцсети проще
__________________
Чтобы доказать, что вы не робот, причините вред другому человеку.

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

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

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


 


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


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