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

Регистрация: Jun 2011
Сообщений: 12
По умолчанию Путаются флешки с ассетами, загруженными BulkLoader-ом

Здравствуйте.

Разрабатывая приложение для вконтакта, неожиданно наткнулся на странную багу и никак не могу понять в чем причина. Прошу прощения, если создал тему не в том разделе, но мне кажется, к API вконтакта она не относится.

Суть в следующем: у меня есть несколько swf-ок с ассетами, которые я загружаю со своего сервера при старте приложения. Для загрузки и управления используется BulkLoader. Для упрощения понимания, обозначим загружаемые флешки так:
Код AS3:
_loader.add(_uri1.toString(), { id: "asset1", context: _LdrContext });
_loader.add(_uri2.toString(), { id: "asset2", context: _LdrContext });
_loader.addEventListener(BulkLoader.COMPLETE, _assets_complete_func);
_loader.addEventListener(BulkLoader.ERROR, _assets_error_func);
_loader.addEventListener(BulkLoader.PROGRESS, _assets_progress_func);
_loader.start();
На самом деле, процесс загрузки более сложный, но не в нем суть. Т.к. сами по себе ассеты загружаются правильно и четко.
Доступ к конкретным ассетам организован так:
Код AS3:
	public function getAssetClass(asset_id:String, class_name:String):Class {
	var res:Object = _loader.getContent(asset_id);
	if(res) {
		try {
			var cl:Class = res.loaderInfo.applicationDomain.getDefinition(class_name) as Class;
		} catch(e) {
			return null;
		}
	 	return cl;
	} else {
		return null;
	}
}
public function createAssetSprite(assetCollection:String, assetClassName:String):Sprite {
	var assetClass:Class = getAssetClass(assetCollection, assetClassName);
	var art:Sprite = null;
	if(!assetClass) {
		var noimg = ((new NoImage()) as Sprite);
	} else {
		var bmp:Bitmap = new assetClass() as Bitmap;
		art = new Sprite();
		art.addChild(bmp);
	}
	return art;
}
Внутри приложения обращаюсь к ассетам:
Код AS3:
	_currentImage = _assetManager.createAssetSprite(asset_id, image_id);
И, собственно, в чем проблема: запуская приложение из вконтакта, вне зависимости какой asset_id я передаю в метод createAssetSprite, результирующий спрайт всегда берется из одной и той же флешки.
Поясню на примере: asset1 - это набор аватаров для мальчиков, asset2 - аватары для девочек, кликая на кнопку юзер выбирает свой пол. Так вот из вконтакта показываются либо только мальчики, либо только девочки. Когда запускаю то же самое приложение из CS5.5 или просто swf-ку из винды - с каждым кликом мальчик/девочка чередуются, т.е. все происходит как и задумывалось.
Подскажите, пожалуйста, в чем может быть проблема? Контролирует ли как-то вконтакт подгружаемые флешки? Может быть как-то кэш браузера влияет?

Спасибо.