| ZergMaster |
08.04.2010 15:06 |
в очередной раз большое спасибо to udaaff! Хоть и изломал голову, но таки решил проблему. ) Приведу код, вдруг кому поможет. Предупреждаю сразу - пишу пока что по ламерски в первом фрэйме. Хоть и осознаю, что .as файлами писать гораздо правильней, лаконичней удобней потом модифицировать программу, но меня почему-то пока что такой способ пугает.. хотя надо...
В данном коде, имхо, полностью раскрыта тема Снятия сэкрана Битовой маски, создания альбома вконтакте и отправки этой битовой маски в качестве фотографии в этот альбом, после чего постинг получившейся фотографии на стену выбранного друга.
все дело происходит при нажатии на кнопку scrin
vkr - это переменная, в которой лежит класс VkontakteRequest
Добавлено через 2 минуты
Код AS3:
scrin.butScreen.addEventListener(MouseEvent.CLICK, prtScr) scrin.butScreen.useHandCursor = true;
scrin.butScreen.buttonMode = true;
function prtScr(e:Event):void
{
var ssil:String;//ссылка на фото
var Alboms:XML; //сканирование альбомов
var boolAlbom:Boolean = false; //добавлен ли альбом c определенным названием
var IDAlbom:String; //айдишник альбома
var AlbTitle:String = "My Albom" //назване альбома автоматов
var UploadURL:String; //адрес сервера на который грузить фотки;
vkr.addEventListener(VkontakteEvent.VK_RESPONSE, onGetUserSettingsResponse);
vkr.sendGetUserSettings();
function onGetUserSettingsResponse(e:VkontakteEvent):void
{
vkr.removeEventListener(VkontakteEvent.VK_RESPONSE, onGetUserSettingsResponse);
trace('Boolean(e.xml.settings & 512) = '+Boolean(e.xml.settings & 512))
if((Boolean(e.xml.settings & 512)==false)||(Boolean(e.xml.settings & 4)==false))
//проверяем: если у юзера в настройках не стоят галочки "доступ к фотографиям" и "постинг на стену"
{
wrapper.addEventListener("onSettingsChanged", onSettingsChange);
wrapper.external.showSettingsBox(516);
//то вызываем окошечко с предложением это сделать
function onSettingsChange(e: Object): void
{
wrapper.removeEventListener("onSettingsChanged", onSettingsChange);
_getAlboms();
}
} else { //если все ништяк и галки стоят - проверяем альбомы
_getAlboms();
}
}
function _getAlboms():void
{
vkr.addEventListener(VkontakteEvent.VK_RESPONSE, onGetAlbumResponse);
vkr.addEventListener(VkontakteEvent.VK_ERROR, onGetAlbumError);
vkr.sendGetAlbum();
function onGetAlbumResponse(e:VkontakteEvent):void
{
vkr.removeEventListener(VkontakteEvent.VK_RESPONSE, onGetAlbumResponse);
Alboms = e.xml;
trace('\n'+'Список альбомов (Alboms) = '+Alboms)
_findCreatedAlbom();
//получаем список альбомов юзера, заносим в переменную и вызываем функц. поиск альбома
}
function onGetAlbumError(e:VkontakteEvent):void
{
vkr.removeEventListener(VkontakteEvent.VK_ERROR, onGetAlbumError);
trace('\n'+'Ошибочка вышла')
}
}
function _findCreatedAlbom():void //функция сканирует альбомы на предмет того, создавал ли пользователь уже такой
{
for(var i:Number=0; i<Alboms..album.length(); i++) //перебираем альбомы
{
if(Alboms.album[i].title == AlbTitle)
{
trace('\n'+"В конце же концов!! Хватит создавать альбомы один за другим!")
IDAlbom = Alboms.album[i].aid
boolAlbom = true;
_GetUploadServer(IDAlbom);
//если название альбома совпадает с именем нашего альбома ("My Albom"), значит он
//уже создан, о чем мы сообщаем в переменную boolAlbom и запускаем функц
//для получения ссылки для загрузки нашего скрина в данный альбом
}
}
if(boolAlbom==false)
{
_createAlb();
//если же boolAlbom так и осталась false, значит альбома с таким названием ещё нет,
//что мы тут же исправляем, запуская функцию _createAlb()
}
}
function _createAlb():void
{
trace("\n"+"создаем альбом");
vkr.addEventListener(VkontakteEvent.VK_RESPONSE, onCreateAlbumResponse);
vkr.addEventListener(VkontakteEvent.VK_ERROR, onCreateAlbumError);
vkr.sendCreateAlbum(AlbTitle);
}
function onCreateAlbumResponse(e:VkontakteEvent):void
{
vkr.removeEventListener(VkontakteEvent.VK_RESPONSE, onCreateAlbumResponse);
trace("ответ, который пришел(?) = "+e.xml)
trace('а так же переменная, которая мне чрезвычайно нужна = '+e.xml.album.aid)
IDAlbom = e.xml.album.aid
_GetUploadServer(IDAlbom);
}
function onCreateAlbumError(e:VkontakteEvent):void
{
vkr.removeEventListener(VkontakteEvent.VK_ERROR, onCreateAlbumError);
trace("ответ, который пришел(?) = "+e.message)
}
function _GetUploadServer(IDA):void
{
trace("\n"+"получаем адрес для загрузки");
vkr.addEventListener(VkontakteEvent.VK_RESPONSE, onGetUploadServerResponse);
vkr.addEventListener(VkontakteEvent.VK_ERROR, onGetUploadServerError);
vkr.sendGetUploadServer(IDA);
}
function onGetUploadServerResponse(e:VkontakteEvent):void
{
vkr.removeEventListener(VkontakteEvent.VK_RESPONSE, onGetUploadServerResponse);
UploadURL = e.xml.upload_url;
trace('\n'+'UploadURL ===> '+UploadURL)
//ура, получили ссылку на загрузку фоток, сохраняем её в переменную и запускаем функц
//выбор друга, при помощ которой пользователь сможет выбрать друга, на стену которого
//он хочет загрузить скрин.
_viborDruga();
}
function onGetUploadServerError(e:VkontakteEvent):void
{
vkr.removeEventListener(VkontakteEvent.VK_ERROR, onGetUploadServerError);
trace('Errora')
}
var Wally = wrapper.application.parameters["viewer_id"]; //это на будущее, заносим в переменную Wally viewer_id.
//в ней будет хранится id пользователя, на стену которого будет поститься скрин
//теперь будет длинная функция Выбор друга.
//тут используется некий RaytingerArr
//это массив, полученный в результате вызова метода getProfiles(id:String) в другой части программы
//чтобы было понятно, что в нем лежит, приведу кусок кода оттуда:
/*
function onGetProfilesResponse2(e: VkontakteEvent):void
{
vkr.removeEventListener(VkontakteEvent.VK_RESPONSE, onGetProfilesResponse2);
for(var I:Number=0; I<e.xml..user.length(); I++)
{
RaytingerArr.push([e.xml.user[i].first_name, e.xml.user[i].photo_medium, e.xml.user[i].last_name, e.xml.user[i].uid])
}
*/
|