![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
В одной папке лежат:
- fla-файл - папка vk с классами для работы с API - папка network - as-файлы FirstLaunch.as, VKConnect.as Во fla-файле в свойствах кадра указан FirstLaunch.as Вот его содержимое package { import flash.display.*; import network.*; import flash.system.*; import flash.utils.*; public class FirstLaunch extends MovieClip { private static var DOMAIN:String = "http://*****.ru/crossdomain.xml"; // ВКЛЮЧЕНИЕ/ВЫКЛЮЧЕНИЕ ОТЛАДКИ public var DEBUG:Boolean = true; public function FirstLaunch():void { if (DEBUG) trace("ШАГ №1. СОЕДИНЕНИЕ С СЕРВЕРОМ ИГРЫ *****.ru"); if (DEBUG) trace("FirstLaunch запущен"); Security.loadPolicyFile(DOMAIN); if (DEBUG) trace("crossdomain.xml загружен"); var checkNet:CheckNetwork = new CheckNetwork(DEBUG); var i:int = 10; var statusIntervalID:* = setInterval(function() { var isConnect:Boolean = checkNet.getStatus(); if (i > 0) { if (!isConnect) { if (DEBUG) trace("Попытка #"+i); i++; } else { clearInterval(statusIntervalID); if (DEBUG) trace("Соединение установлено."); if (DEBUG) trace("ШАГ №2. ПОЛУЧЕНИЕ ДАННЫХ ВКОНТАКТЕ"); var vkConnect:VKConnect = new VKConnect(); var isVKConnected:Boolean = vkConnect.getVKConnected(); var vkConnectTimeoutID:int = setTimeout(function() { trace(isVKConnected); },5000); } } else { clearInterval(statusIntervalID); if (DEBUG) trace("Количество попыток иссякло"); } },1000); } } } package network { import flash.net.*; import flash.events.*; import flash.errors.*; import flash.display.*; public class CheckNetwork extends Sprite { private static var random:int = Math.round(Math.random() * 10000); private static var DOMAIN:String = "http://*****.ru/AS3_connect.php?launch="+random; public var isConnected:Boolean = false; public var isDebug = false; public function CheckNetwork(isDebug:Boolean = false) { this.isDebug = isDebug; if (this.isDebug) trace("Соединяюсь с '" + DOMAIN + "'..."); var urlLoader:URLLoader = new URLLoader(); var urlRequest:URLRequest = new URLRequest(DOMAIN); urlLoader.addEventListener(Event.COMPLETE, completeListener); urlLoader.addEventListener(IOErrorEvent.IO_ERROR, ioErrorListener); urlLoader.load(urlRequest); } private function completeListener(e:Event):void { if (this.isDebug) trace("Соединился. Получаю данные..."); var requestString:String = e.target.data; if (this.isDebug) trace("requestString: "+requestString); if (requestString) { var jsonObj:Object = new Object(); jsonObj = JSON.parse(requestString); var CONNECTION:String = jsonObj.response; if (CONNECTION == "CONNECTION_DONE") { isConnected = true; if (this.isDebug) trace("CONNECTION: " + CONNECTION); } } else { if (this.isDebug) trace("Нет данных в requestString"); } } private function ioErrorListener(e:Event) { if (this.isDebug) trace(DOMAIN + ": ОШИБКА СОЕДИНЕНИЯ"); } public function getStatus():Boolean { return isConnected; } } } package { import flash.display.*; import flash.events.*; import vk.APIConnection; import vk.events.*; public class VKConnect extends Sprite { public var isVK:Boolean = false; public function VKConnect() { if (stage) init(); else addEventListener(Event.ADDED_TO_STAGE, init); } private function fetchUserInfo(data: Object): void { // Example of fetching info from API request for (var key: String in data[0]) { trace(key + "=" + data[0][key] + "\n"); } } private function onApiRequestFail(data: Object): void { // Example of fetching fail from API request trace("VKAPI-ошибка: "+data.error_msg+"\n"); } private function init(e: Event = null): void { if (e) { removeEventListener(e.type, init); } var flashVars: Object = stage.loaderInfo.parameters as Object; trace(flashVars); if (!flashVars.api_id) { flashVars['api_id'] = *****; flashVars['viewer_id'] = *****; flashVars['sid'] = "*****"; flashVars['secret'] = "*****"; } var VK: APIConnection = new APIConnection(flashVars); VK.api('getProfiles', { uids: flashVars['viewer_id'] }, fetchUserInfo, onApiRequestFail); VK.addEventListener('onConnectionInit', function(): void{ trace("Соединение с ВКонтакте установлено"); isVK = true; }); } public function getVKConnected() { return isVK; } } } var vkConnect:VKConnect = new VKConnect(); var isVKConnected:Boolean = vkConnect.getVKConnected(); var vkConnectTimeoutID:int = setTimeout(function() { trace(isVKConnected); },5000); Добавлено через 20 минут Вопрос еще один. Как в Profeccional присвоить кадрам разные классы...
__________________
Надо сменить подпись... |
|
|||||
|
Цитата:
Цитата:
|
|
|||||
|
.
|
Цитата:
|
|
|||||
|
dimarik, хм, да, спасибо. Не додумался.....
caseyryan, да я знаю, что через HTTP.. Поэтому просто подключиться и проверить. Заодно и viewer_id получить для дальнейшего соединения
__________________
Надо сменить подпись... |
|
|||||
|
Для начала неплохо бы разобраться с базовой структурой и ООП, а потом уже лезть в связь с сервером итд.
Вот тут я и Wolsh пытались объяснить основные особенности объектно-ориентированной структуры: http://www.flasher.ru/forum/showthread.php?t=210113
__________________
There is no thing in this world that is not simple. |
|
|||||
|
ZackMercury,о, спасибо
А такой вопрос: вот написал я класс. Как инициируется его запуск, если я пользуюсь только FD? Там где написано // entry point?
__________________
Надо сменить подпись... |
|
|||||
|
EndoCrinologist, экземпляр главного класса приложения создаётся автоматически и сразу добавляется в дисплей лист stage, его можно получить по stage.getChildAt(0) - по умолчанию это будет ваш главный класс.
Как только создается его экземпляр, выполняется метод-конструктор класса, как и в случае с любым другим классом. Ваша заготовка с if(stage) init(); else addEventListener(Event.ADDED_TO_STAGE, init); нужна только если вы планируете в будущем грузить эту флешку другой флешкой. Она обеспечивает вам доступ к stage(по умолчанию пока DisplayObject не добавлен в список отображения - ссылка на stage == null) однако если ваша флешка запускается сразу из страницы или стендалон-плеера, то ссылка на stage в главном классе доступна уже в его конструкторе.
__________________
There is no thing in this world that is not simple. |
|
|||||
|
О боже, как все сложно... Столько мороки... Раньше понарисовал что надо, понаприкреплял код и сиди-радуйся.. Нееет.. Им надо было гемор составить.. Теперь вместо того, чтобы ДЕЛАТЬ автомобиль, люди днями сидят и продумывают КОД для робота, который этот автомобиль бы сделал..... bueh......
__________________
Надо сменить подпись... |
|
|||||
|
EndoCrinologist, люди стараются уходить от быдлокода и пытаются сделать код универсальным(не зависящим от проекта или даже платформы/языка).
Это вполне нормальный процесс. Никто не хочет переписывать проект несколько раз, чтобы поменять отдельный модуль(например, внешний вид или отдельно логику работы кнопки).
__________________
There is no thing in this world that is not simple. |
|
|||||
|
Дык, проблема как раз-таки в том, чтобы создать такую универсальную кнопку... Проблема в том, что в коде тебе придется учитывать всевозможные случаи поведения.. А это ли не гемор?...
__________________
Надо сменить подпись... |
![]() |
![]() |
Часовой пояс GMT +4, время: 08:55. |
|
|
« Предыдущая тема | Следующая тема » |
|
|