Advertisement
terorama

Flash / Examples 8

Apr 1st, 2013
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. //-----------------------------------------------------------------------
  2. //-----------------------------------------------------------------------
  3. //-----------------------------------------------------------------------
  4. //-----------------------------------------------------------------------
  5.  
  6. //Начальная настройка слайдеров.
  7. angleSpeedSlider.value = 10;
  8. angleSpeedSlider.minimum = 1;
  9. angleSpeedSlider.maximum = 30;
  10.  
  11. zSpeedSlider.value = 7;
  12. zSpeedSlider.minimum = 1;
  13. zSpeedSlider.maximum = 20;
  14.  
  15. radiusSlider.value = 7;
  16. radiusSlider.minimum = 1;
  17. radiusSlider.maximum = 20;
  18.  
  19. //Максимальная глубина квадратов.
  20. const MAXIMUM_Z:Number = 450;
  21.  
  22. //Количество квадратов.
  23. const NUMBER_OF_BOXES:Number = 14;
  24.  
  25. //Создаем массив, который будет содержать квадраты.
  26. var boxes:Array = new Array();
  27.  
  28. //Задаем фокусное расстояние.
  29. var focalLength:Number = 300;
  30.  
  31. //Задаем точку появления квадратов.
  32. var vanishingPointX:Number = stage.stageWidth / 2;
  33. var vanishingPointY:Number = 20;
  34.  
  35. //Задаем 3Д пол для квадратов.
  36. var floor:Number = 80;
  37.  
  38. //Задаем начальную глубину.
  39. var startingDepth:Number = MAXIMUM_Z;
  40.  
  41. //Задаем расстояние по оси Z между соседними квадратами.
  42. var zDistance:Number = 50;
  43.  
  44. //Задаем скорость движения квадратов по оси Z.
  45. var zSpeed:Number = -(zSpeedSlider.value);
  46.  
  47. //Мы назначаем различный стартовый угол для каждого квадрата (мы увеличиваем его позже).
  48. var angle:Number = 0;
  49.  
  50. //Угловое различие между квадратами
  51. var angleDifference:Number = 0.3;
  52.  
  53. //Скорость изменения угла между квадратами.
  54. var angleSpeed:Number = angleSpeedSlider.value * 0.01;
  55.  
  56. //Радиус траектории движения квадратов.
  57. var radius:Number = radiusSlider.value * 10;
  58.  
  59. //Этот цикл создает и размещает квадраты (первый квадрат находится дальше всех).
  60. for (var i=0; i < NUMBER_OF_BOXES; i++) {
  61.  
  62.  //Создается новый квадрат.
  63.  var box:MyBox = new MyBox();
  64.  
  65.  //Расчитываем 3Д положение по оси Х (мы сделаем волну синуса).
  66.  box.xpos3D = Math.sin(angle) * radius;
  67.  
  68.  //Сохраняем информацию о значении угла квадрата.
  69.  box.currentAngle = angle;
  70.  
  71.  //Увеличиваем стартовый угол следующего квадрата.
  72.  angle += angleDifference;
  73.  
  74.  //3Д позиция по оси У у всех квадратов одинаковая.
  75.  box.ypos3D=floor;
  76.  
  77.  //Задаем положение квадрата по оси Z. Чем больше Z, тем дальше квадрат от нас.
  78.  box.zpos3D=startingDepth;
  79.  
  80.  //Обновляем начальную глубину для следующего квадрата.
  81.  startingDepth-=zDistance;
  82.  
  83.  //Расчитываем размер квадрата относительно его положения по оси Z.
  84.  var scaleRatio = focalLength/(focalLength + box.zpos3D);
  85.  
  86.  //Задаем размеры квадрата
  87.  box.scaleX=box.scaleY=scaleRatio;
  88.  
  89.  //Размещаем квадрат на сцене. Переводим 3Д координаты в 2Д.
  90.  box.x=vanishingPointX+box.xpos3D*scaleRatio;
  91.  box.y=vanishingPointY+box.ypos3D*scaleRatio;
  92.  
  93.  //Помещаем квадрат в массив.
  94.  boxes.push(box);
  95.  
  96.  //Добавляем квадрат в список отображения.
  97.  addChild(box);
  98. }
  99.  
  100. //Используем событие ENTER_FRAME для анимации.
  101. addEventListener(Event.ENTER_FRAME, enterFrameHandler);
  102.  
  103. //Эта функция вызывается каждый кадр.
  104. function enterFrameHandler(e:Event):void {
  105.  
  106.  //Получаем динамические скорости от наших ползунков.
  107.  angleSpeed=angleSpeedSlider.value*0.01;
  108.  zSpeed = -(zSpeedSlider.value);
  109.  radius = radiusSlider.value * 10;
  110.  
  111.  //Цикл перебивает квадраты.
  112.  for (var i=0; i < NUMBER_OF_BOXES; i++) {
  113.  
  114.  //Сохраняем квадрат в локальной переменной.
  115.  var box:MyBox = (MyBox)(boxes[i]);
  116.  
  117.  //Обновляем позицию по оси Z.
  118.  box.zpos3D+=zSpeed;
  119.  
  120.  //Обновляем угол квадрата.
  121.  box.currentAngle+=angleSpeed;
  122.  
  123.  //Если zpos3D <= -focalLength, то помещаем квадрат в самое начало, позади всех других.
  124.  if (box.zpos3D<=- focalLength) {
  125.  
  126.  //Сохраняем последний квадрат в локальной переменной.
  127.  //Последный квадрат всегда первый в массиве - это результат действия функции сортировки sortZ().
  128.  var lastBox:MyBox = (MyBox)(boxes[0]);
  129.  
  130.  //Размещаем квадрат позади последнего.
  131.  box.zpos3D=lastBox.zpos3D+zDistance;
  132.  
  133.  //Получаем новый угол для квадрата (Угол такой же, как у последнего квадрата, минут угловое отличие angleDifference).
  134.  box.currentAngle=lastBox.currentAngle-angleDifference;
  135.  }
  136.  
  137.  //Расчитываем новую позицию по оси Х.
  138.  box.xpos3D=Math.sin(box.currentAngle)*radius;
  139.  
  140.  //Расчитываем размер квадрата.
  141.  var scaleRatio = focalLength/(focalLength + box.zpos3D);
  142.  
  143.  //Задаем размер квадрата.
  144.  box.scaleX=box.scaleY=scaleRatio;
  145.  
  146.  //Задаем прозрачность квадрата по альфа каналу в зависимости от размера квадрата.
  147.  box.alpha=scaleRatio-0.5;
  148.  
  149.  //Размещаем квадрат на сцене. Переводим 3Д координаты в 2Д.
  150.  box.x=vanishingPointX+box.xpos3D*scaleRatio;
  151.  box.y=vanishingPointY+box.ypos3D*scaleRatio;
  152.  }
  153.  
  154.  //Сортируем квадраты по глубине.
  155.  sortZ();
  156. }
  157.  
  158. //Функция сортировки квадратов, чтобы они отображались корректно.
  159. function sortZ():void {
  160.  
  161.  //Сортировка квадратов таким образом, что квадрат в наибольшим значением Z всегда был вначале массива.
  162.  boxes.sortOn("zpos3D", Array.NUMERIC | Array.DESCENDING);
  163.  
  164.  //Задается новый индекс квадрата в списке отображения квадратов.
  165.  for (var i:uint = 0; i < NUMBER_OF_BOXES; i++) {
  166.  setChildIndex(boxes[i], i);
  167.  }
  168. }
  169.  
  170. //-----------------------------------------------------------------------
  171. //-----------------------------------------------------------------------
  172. //-----------------------------------------------------------------------
  173. //-----------------------------------------------------------------------
  174.  
  175. //Это импорт твина для анимации текста.
  176. import fl.transitions.Tween;
  177. import fl.transitions.easing.Regular;
  178. //Это начальное время отсчета.
  179. var n:uint = 0;
  180. //Создаем экземпляр нашего мувиклипа, который будет анимироваться.
  181. var tBig:myMC = new myMC();
  182. //Помещаем его в центр.
  183. tBig.y = 240;
  184. tBig.x = 320;
  185. //Отключаем реакцию текстового поля на мышь.
  186. tBig.myText.mouseEnabled = false;
  187. //Добавляем мувиклип в список отобращения.
  188. stage.addChild( tBig );
  189. //Делаем тоже самое еще раз для еще одного экземпляра, который анимироваться не будет.
  190. var t:myMC = new myMC();
  191. t.y = 240;
  192. t.x = 320;
  193. t.myText.mouseEnabled = false;
  194. stage.addChild( t );
  195. //Создаем таймер и задаем время таймера 1 секунда (1000 миллисекунд).
  196. var myTimer:Timer = new Timer( 1000, 0 );
  197. //Запускаем таймер.
  198. myTimer.start();
  199. //Назначаем слушатель событий таймера.
  200. myTimer.addEventListener( TimerEvent.TIMER, Count );
  201. //Создаем функцию, которая будет запускаться как только сработает таймер ( 1 раз в секунду ).
  202. function Count( e:TimerEvent ):void
  203. {
  204. //Задаем текст нашим текстовым полям.
  205. tBig.myText.text = String( n );
  206. t.myText.text = String( n );
  207. //Увеличиваем наш счетчик.
  208. n += 1;
  209. //Анимируем первый мувиклип.
  210. new Tween( tBig, "alpha", Regular.easeOut, 1, 0, 1, true );
  211. new Tween( tBig, "scaleX", Regular.easeOut, 1, 20, 1, true );
  212. new Tween( tBig, "scaleY", Regular.easeOut, 1, 20, 1, true );
  213. }
  214. //Конец, а кто читал - молодец.
  215.  
  216. //-----------------------------------------------------------------------
  217. //-----------------------------------------------------------------------
  218. //-----------------------------------------------------------------------
  219. //-----------------------------------------------------------------------
  220.  
  221.  
  222. import fl.events.ColorPickerEvent;
  223. import flash.geom.ColorTransform;
  224.  
  225. // При запуске сделаем белый цвет текущим.
  226. myColorPicker.selectedColor = 0xffffff;
  227.  
  228. // Создадим переменную, которая будет содержать информацию о цвете нашего МувиКлипа.
  229. var colorInfo:ColorTransform = myMovieClip.transform.colorTransform;
  230.  
  231. // Добавим слушатель на событие смены цвета компонента ColorPicker.
  232. myColorPicker.addEventListener(ColorPickerEvent.CHANGE, colorChanged);
  233.  
  234. function colorChanged(e:ColorPickerEvent):void
  235. {
  236.  // Передадим переменной, содержащей цвет нашего МувиКлипа, новый выбранный цвет.
  237.  colorInfo.color = myColorPicker.selectedColor;
  238.  
  239.  // Зададим нашему МувиКлипу новый цвет.
  240.  myMovieClip.transform.colorTransform = colorInfo;
  241.  
  242.  // Отобразим выбранный цвет в шеснадцатиричном виде.
  243.  myCurrentColor.text ="Текущий цвет: " + String(myColorPicker.hexValue);
  244. }
  245.  
  246. //-----------------------------------------------------------------------
  247. //-----------------------------------------------------------------------
  248. //-----------------------------------------------------------------------
  249. //-----------------------------------------------------------------------
  250.  
  251. import vk.*;//импорт библиотеки(в исходнике)
  252.  
  253. //переменные для VkApi
  254. var wrapper:Object;
  255. var api:VkApiNode;
  256. var api_id:Number=111111;//ID вашего приложения
  257. var api_secret:String="2222222";//секрет вашего приложения
  258. var server_url:String;
  259. var viewer_id:Number;
  260. var query:String;
  261. var api_XML:XML = new XML();
  262. var api_loader:URLLoader = new URLLoader();
  263. var api_request:URLRequest;
  264.  
  265. //мувики
  266. var Loading:MovieClip = new mc_press();
  267.  
  268. //массив друзей
  269. var FriensList:Array = new Array();
  270.  
  271. //------------------------------
  272. this.addEventListener(Event.ADDED_TO_STAGE, onAddedToStage);
  273.  
  274. function onAddedToStage(e:Event):void {
  275.  wrapper = Object(this.parent.parent);
  276.  Security.allowDomain("*");
  277.  stage.dispatchEvent(new Event(Event.DEACTIVATE));
  278.  stage.dispatchEvent(new Event(Event.ACTIVATE));
  279.  server_url = wrapper.application.parameters.api_url + '?';//определяем адресс сервера
  280.  viewer_id = wrapper.application.parameters.viewer_id;//узнаем id просматривающего приложение
  281.  api = new VkApiNode(viewer_id,api_id,api_secret, false, "XML", "2.0", server_url);//делаем копию библиотеки
  282.  if (wrapper.application.parameters.is_app_user == 1) {//если пользователь установил приложение
  283.  if(!Boolean(wrapper.application.parameters.api_settings & 2))//если есть нет доступа к друзьям
  284.  {
  285.  AppSettings();//вызывам окно с настройкими
  286.  }else{
  287.  PUSK();//продолжаем запуск приложения
  288.  }
  289.  }else{
  290.  AppInstal();//вызывам окно с добавлнием на страницу
  291.  }
  292. }
  293. //-----------------------------
  294. function AppSettings():void
  295. {
  296.  wrapper.external.showSettingsBox(+2);//автоматически вызываем окно настроек приложения
  297. }
  298. function onApplicationAdded(e:Object):void
  299. {
  300.  if(!Boolean(wrapper.application.parameters.api_settings & 2))
  301.  {
  302.  AppSettings();//автоматически вызываем окно с добавлнием на страницу
  303.  }else{
  304.  PUSK();//продолжаем запуск приложения
  305.  }
  306. }
  307. //-----------------------------
  308. function onSettingsChanged(e:Object):void
  309. {
  310.  if(!Boolean(e.settings & 2))
  311.  {
  312.  PUSK();//продолжаем запуск приложения
  313.  wrapper.removeEventListener("onSettingsChanged", onSettingsChanged );//удаляем слушатель
  314.  }
  315. }
  316. //-----------------------------
  317. function AppInstal():void
  318. {
  319.  wrapper.external.showInstallBox();//автоматически вызываем окно добавления приложения на страницу
  320. }
  321. //-----------------------------
  322. function PUSK():void
  323. {
  324.  Loading.x = wrapper.application.stageWidth /2;//выравниваем
  325.  Loading.y = wrapper.application.stageHeight /2;
  326.  addChild(Loading);//добавляем на сцену окошко с зугрузкой
  327.  query = api.getFriends();//создаем ссылку с помошью библиотеки
  328.  api_request=new URLRequest(query);//загружаем данные с ссылки
  329.  api_loader.addEventListener(Event.COMPLETE, onloadedPUSK);//что произойдет при завершении загрузки
  330.  api_loader.load(api_request);//загружаем
  331.  FriendsPanel.addEventListener(Event.CHANGE, onFrendAva);//добавляем к списку друзей слушатель, который сработает когда пользователь изменит положение бегунка на нем
  332. }
  333. //-----------------------------
  334. function onloadedPUSK(e:Event):void
  335. {
  336.  api_loader.removeEventListener(Event.COMPLETE, onloadedPUSK);//удаляем старый слушатель
  337.  api_XML = XML(api_loader.data);//сохраняем данные в переменную
  338.  if(api_XML.children().length() > 100)//если друзей более 100
  339.  {
  340.  cutListFriend();//вызваем функцию для загрузки больших списков друзей
  341.  }else{
  342.  removeChild(Loading);//удаляем окно загрузки
  343.  for (var i:int=0; i<api_XML.children().length();i++)//запускаем цикл
  344.  {
  345.  FriensList[i] = api_XML.children()[i].toString();//пихаем id друзей в массив
  346.  }
  347.  query = api.getProfiles(FriensList, ['first_name,last_name']);//создаем ссылку с помошью библиотеки
  348.  api_request=new URLRequest(query);//загружаем данные с ссылки
  349.  api_loader.addEventListener(Event.COMPLETE, onloadedFriens);//что произойдет при завершении загрузки
  350.  api_loader.load(api_request);//загружаем
  351.  }
  352. }
  353. //-----------------------------
  354. function cutListFriend():void
  355. {
  356.  var FriendsN:Number = 0;//обьявляем перемнную "счетчик"
  357.  for(var i:int=0; i<api_XML.children().length();i++)//запускаем цикл
  358.  {
  359.  FriendsN += 1;//ставим счетчик
  360.  FriensList[i] = api_XML.children()[i].toString();//пихаем друга в массив
  361.  if(FriendsN == 100)//когда счетчик дощел до 100
  362.  {
  363.  FriendsN = 0;//обнуляем его
  364.  query = api.getProfiles(FriensList, ['first_name,last_name']);//создаем ссылку с помошью библиотеки
  365.  api_request=new URLRequest(query);//загружаем данные с ссылки
  366.  api_loader.addEventListener(Event.COMPLETE, onloadedFriens);//что произойдет при завершении загрузки
  367.  api_loader.load(api_request);//загружаем
  368.  FriensList = new Array();//чистим массив
  369.  }else if((api_XML.children().length() - i) == 1)//если счетчик не дошел до 100, но друзей осталось меньше 100
  370.  {
  371.  FriendsN = 0;//обнуляем счетчик
  372.  query = api.getProfiles(FriensList, ['first_name,last_name']);//создаем ссылку с помошью библиотеки
  373.  api_request=new URLRequest(query);//загружаем данные с ссылки
  374.  api_loader.addEventListener(Event.COMPLETE, onloadedFriens);//что произойдет при завершении загрузки
  375.  api_loader.load(api_request);//загружаем
  376.  }
  377.  }
  378.  removeChild(Loading);//удаляем окно загрузки
  379. }
  380. //-----------------------------
  381. function onloadedFriens(e:Event):void
  382. {
  383.  api_loader.removeEventListener(Event.COMPLETE, onloadedFriens);//удаляем старый слушатель
  384.  api_XML = XML(api_loader.data);
  385.  for (var i:int=0; i<api_XML.children().length();i++)//запускаем цикл
  386.  {
  387.  FriendsPanel.addItem({label:api_XML.children()[i].first_name + " " + api_XML.children()[i].last_name, d&#097;ta:api_XML.children()[i].uid});//добавляем в лист на сцене пункт
  388.  }
  389. }
  390. //-----------------------------
  391. function onFrendAva(e:Event):void
  392. {
  393. //загружаем аватар друга, которого выбрали из списка
  394.  query = api.getProfiles([e.target.selectedItem.data], ['photo_big']);
  395.  api_request=new URLRequest(query);
  396.  api_loader.addEventListener(Event.COMPLETE, onloadedFriendAva);
  397.  api_loader.load(api_request);
  398. }
  399. function onloadedFriendAva(e:Event):void
  400. {
  401.  api_XML = XML(api_loader.data);
  402.  FriendAva.source = api_XML..photo_big.toString();//показываем аватар
  403.  
  404. }
  405.  
  406. //-----------------------------------------------------------------------
  407. //-----------------------------------------------------------------------
  408. //-----------------------------------------------------------------------
  409. //-----------------------------------------------------------------------
  410.  
  411. import vk.*;
  412. //импотритуем все что нам надо
  413.  
  414. //все это необходимое есть в архиве с исходником
  415.  
  416. var api_id:Number =1605383;//ID приложения, которое мы получили вначале
  417. var api_secret:String = "IQyfnhjlTc";//Ключ приложения, которое мы получили вначале
  418. var viewer_id:Number;//id пользователя который просматривает приложение
  419. var url_loader1:URLLoader = new URLLoader();//лоадеры
  420. var url_request1:URLRequest = new URLRequest();
  421. var url_loader2:URLLoader = new URLLoader();
  422. var url_request2:URLRequest = new URLRequest();
  423. var url_loader3:URLLoader = new URLLoader();
  424. var url_request3:URLRequest = new URLRequest();
  425. var api:VkApiNode;//создаем переменную класса, каждый вызов к Api буде создаваться ее экземпляр
  426. var query:String;// переменная пути запроса в URL, а данные будут передаваться методом GET
  427. var timer:Timer = new Timer(2500);//таймер, по срабатыванию которого будем обновять поле сообщений 2.5, самое оптималное время, но меняйте как душе угодно
  428. var save:XML=new XML();//XML который хранит сообщения
  429. var VkAvatar:Loader = new Loader();//Лоадер для аватара
  430. var VkAvatarUrl:URLRequest = new URLRequest();//путь аватара
  431. var wrapper:Object;//обьект <<контейнер>>, который загружает в себя приложение
  432.  
  433. //----------------------------------
  434. this.addEventListener( Event.ADDED_TO_STAGE, onAddedToStage );//событие произойдет, когда контейнер полностью загрузит приложение
  435.  
  436. //----------------------------------
  437. function onAddedToStage(e: Event):void {
  438.     Security.allowDomain("*");
  439.     stage.dispatchEvent(new Event(Event.DEACTIVATE));//решение проблемы неработоспособности некоторых элементов
  440.     stage.dispatchEvent(new Event(Event.ACTIVATE));
  441.     wrapper = Object(this.parent.parent);//определяем контейнер
  442.     viewer_id = wrapper.application.parameters.viewer_id;//передаем переменной знчение id просматривающего приложение
  443.     timer.start();//запускаем таймер
  444.  
  445.     stage.addEventListener(Event.ENTER_FRAME, Emess);//добавляем слушатели
  446.     btn.addEventListener(MouseEvent.CLICK, onMessGo);
  447.     timer.addEventListener(TimerEvent.TIMER, onGetMess);
  448.     Mes_tf.addEventListener(KeyboardEvent.KEY_DOWN, onMessOtpr);
  449.  
  450.     api=new VkApiNode(viewer_id,api_id,api_secret);//загружаем профиль пользователя и самый маленький аватар(photo_medium и photo_big большее размеры), который просматривает приложение
  451.     query=api.getProfiles([viewer_id], ['photo']);
  452.     url_request3=new URLRequest(query);
  453.     url_loader3=new URLLoader;
  454.     url_loader3.addEventListener(Event.COMPLETE, EComplet2);//событие произойдет когда профиль загрузится
  455.     url_loader3.load(url_request3);
  456. }
  457.  
  458. //----------------------------------
  459. function EComplet2(e:Event):void
  460. {
  461.     var XmlO:XML = new XML(url_loader3.data);//создаем переменную хранящую профиль
  462.     VkAvatarUrl = new URLRequest(XmlO.children()[0].photo);//загружаем аватар
  463.     VkAvatar.load(VkAvatarUrl);
  464.     VkAvatar.contentLoaderInfo.addEventListener(Event.COMPLETE, onVkAvatar);//событие произойдет когда аватар загрузится
  465. }
  466.  
  467. //----------------------------------
  468. function onVkAvatar(e:Event):void
  469. {
  470.     VkAvatar.x = 2;
  471.     VkAvatar.y = 2;
  472.     addChild(VkAvatar);//добавляем на сцену аватар
  473. }
  474.  
  475. //----------------------------------
  476. function onMessOtpr(e:KeyboardEvent):void
  477. {
  478.     if(e.keyCode == 13)//если пользавеиель нажал клавишу Enter
  479.     {
  480.         if(Mes_tf.text !== "")//если пое для ввода сообщений не пустое
  481.         {
  482.             api=new VkApiNode(viewer_id,api_id,api_secret);//деаем запрос и ставим сообщение в очередь
  483.               query=api.sendMessage(Mes_tf.text);
  484.             url_request1=new URLRequest(query);
  485.                url_loader1=new URLLoader;
  486.                url_loader1.load(url_request1);
  487.             Mes_tf.text = "";
  488.         }
  489.     }
  490. }
  491. //----------------------------------
  492. function Emess(e:Event):void
  493. {
  494.     if(Mes_tf.text == "")//если поле пустое на кнопку нажать нельзя
  495.     {
  496.         btn.enabled = false;
  497.     }else{//если нет то можно
  498.         btn.enabled = true;
  499.     }
  500. }
  501. //----------------------------------
  502. function onMessGo(e:MouseEvent):void
  503. {
  504.     api=new VkApiNode(viewer_id,api_id,api_secret);//деаем запрос и ставим сообщение в очередь
  505.     query=api.sendMessage(Mes_tf.text);
  506.     url_request1=new URLRequest(query);
  507.     url_loader1=new URLLoader;
  508.     url_loader1.load(url_request1);
  509.     Mes_tf.text = "";
  510. }
  511. //----------------------------------
  512. function onGetMess(e:TimerEvent):void
  513. {
  514.     api=new VkApiNode(viewer_id,api_id,api_secret);//загружаем очередь сообщений
  515.     query=api.getMessages();
  516.     url_request2=new URLRequest(query);
  517.     url_loader2=new URLLoader;
  518.     url_loader2.addEventListener(Event.COMPLETE, EComplet);
  519.     url_loader2.load(url_request2);
  520. }
  521. //----------------------------------
  522. function EComplet(e:Event):void {
  523.     if(XML(url_loader2.data).message_info !== null)//если в очереди хоть что-то есть
  524.     {
  525.         save = new XML(url_loader2.data);//передаем XML полученные данные
  526.         for(var i:int=0; i<save.length(); i++)//запускаем цикл
  527.         {
  528.             if(save.children()[i].user_id == viewer_id)//если данное сообщение отправленно пользователем, который просматривает приложение
  529.             {
  530.                 pole.htmlText += '<b><font color="#ff0000">' + save.children()[i].user_name + "</font></b>: " + save.children()[i].message;//добавляем строку с его именем и сообщением без ссылки и красного цвета
  531.             }else{//если это отправил другой пользователь
  532.                 pole.htmlText += '<b><font color="#000080"><a href="http://vkontakte.ru/id'+save.children()[i].user_id+ '">' + save.children()[i].user_name + '</a>'+ "</font></b>: " + save.children()[i].message;//добавляем строку с его именем с ссылкой на его страничку синего цвета
  533.             }
  534.         }
  535.     }
  536. }
  537.  
  538. //-----------------------------------------------------------------------
  539. //-----------------------------------------------------------------------
  540. //-----------------------------------------------------------------------
  541. //-----------------------------------------------------------------------
  542.  
  543. var Seconds:Number = 30; //ЗАДАЕМ СЕКУНДЫ;
  544. var Minutes:Number = 15; //ЗАДАЕМ МИНУТЫ;
  545. var Hours:Number = 01; //ЗАДАЕМ ЧАСЫ;
  546.  
  547. function TIMER() { //СОЗДАЕМ ФУНКЦИЮ ТАЙМЕРА;
  548. if ((Seconds > 0) || (Minutes > 0) || (Hours > 0)) { //ЕСЛИ СЕКУНДЫ, ИЛИ МИНУТЫ, ИЛИ ЧАСЫ, БОЛЬШЕ НУЛЯ, ТО...
  549. Seconds--; //СЕКУНДЫ УМЕНЬШАЕМ НА ЕДИНИЦУ;
  550. if (Seconds < 0) { //ЕСЛИ СЕКУНДЫ МЕНЬШЕ НУЛЯ, ТО...
  551. Minutes--; //МИНУТЫ УМЕНЬШАЕМ НА ЕДИНИЦУ;
  552. Seconds = 59; //СЕКУНДАМ ПРИСВАЕВАЕМ ЗНАЧЕНИЕ 59;
  553. if (Minutes < 0) { //ЕСЛИ МИНУТЫ МЕНЬШЕ НУЛЯ, ТО...
  554. Hours--; //ЧАСЫ УМЕНЬШАЕМ НА ЕДИНИЦУ;
  555. Minutes = 59; //МИНУТАМ ПРИСВАЕВАЕМ ЗНАЧЕНИЕ 59;
  556. Seconds = 59; //СЕКУНДАМ ПРИСВАЕВАЕМ ЗНАЧЕНИЕ 59;
  557. }
  558. }
  559. if (Seconds <= 9) { //ЕСЛИ СЕКУНДЫ МЕНЬШЕ 9, ТО...
  560. var SS:String = "0" + Seconds; //СТАВИМ ПЕРЕД СЕКУНДАМИ 0;
  561. } else { //ИНАЧЕ...
  562. var SS:String = "" + Seconds; //НЕ СТАВИМ 0;
  563. }
  564. if (Minutes <= 9) { //ЕСЛИ МИНУТЫ МЕНЬШЕ 9, ТО...
  565. var MM:String = "0" + Minutes; //СТАВИМ ПЕРЕД МИНУТАМИ 0;
  566. } else { //ИНАЧЕ...
  567. var MM:String = "" + Minutes; //НЕ СТАВИМ 0;
  568. }
  569. if (Hours <= 9) { //ЕСЛИ ЧАСЫ МЕНЬШЕ 9, ТО...
  570. var HH:String = "0" + Hours; //СТАВИМ ПЕРЕД ЧАСАМИ 0;
  571. } else { //ИНАЧЕ...
  572. var HH:String = "" + Hours; //НЕ СТАВИМ 0;
  573. }
  574. TIMER_TEXT.text = HH + ":" + MM + ":" + SS; //ВЫВОДИМ ЧАСЫ, МИНУТЫ И СЕКУНДЫ В ТЕКСТОВОЕ ПОЛЕ;
  575. } else { //ИНАЧЕ...
  576. TIMER_TEXT._visible = false; //СКРЫВАЕМ ТАЙМЕР;
  577.  
  578. }
  579. }
  580. setInterval(TIMER, 1000); //ФУНКЦИЯ ТАЙМЕРА БУДЕТ ОБНОВЛЯТЬСЯ С ИНТЕРВАЛОМ В 1000 МИЛИСЕКУНД.
  581.  
  582. //-----------------------------------------------------------------------
  583. //-----------------------------------------------------------------------
  584. //-----------------------------------------------------------------------
  585. //-----------------------------------------------------------------------
  586.  
  587. //Клип, в котором будут находиться вершины куба.
  588. var cube:MovieClip = new MovieClip();
  589. //Координаты куба в сцене.
  590. var X:int = 275;
  591. var Y:int = 200;
  592. //Длина грани куба.
  593. var d:uint = 200;
  594. //Координаты вершин куба.
  595. var corX:Array = new Array(-d/2,d/2,d/2,-d/2,-d/2,d/2,d/2,-d/2);
  596. var corY:Array = new Array(-d/2,-d/2,d/2,d/2,-d/2,-d/2,d/2,d/2);
  597. var corZ:Array = new Array(-d/2,-d/2,-d/2,-d/2,d/2,d/2,d/2,d/2);
  598. //Массив цветов граней куба.
  599. var colors:Array = new Array(0x0000cc, 0x00cc00, 0xcc0000, 0xcccc00, 0x00cccc, 0xcc00cc);
  600. //Массив вершин куба.
  601. var dots:Array = new Array(8);
  602. //Массив граней куба.
  603. var sides:Array = new Array(6);
  604. //Индексы вершин при построении треугольников граней куба.
  605. var indices:Vector.<int> = new Vector.<int>();
  606. indices.push(0,1,2,0,2,3);
  607. //-------------------------------------------------------------------
  608. createCube();
  609. stage.addEventListener(Event.ENTER_FRAME, rotateCube);
  610. //-------------------------------------------------------------------
  611.  
  612. //Функция создания куба.
  613. function createCube():void
  614. {
  615.  //Размещаем наш куб в заданных нами координатах.
  616.  addChild(cube);
  617.  cube.x = X;
  618.  cube.y = Y;
  619.  //Добавляем вершины куба в один МувиКлип, чтобы можно было легко ими вращать в сцене.
  620.  for (var i:uint = 0; i < dots.length; i++)
  621.  {
  622.  //Создаем спрайты, которые будут "контейнером" для вершин куба.
  623.  var p:Sprite = new Sprite();
  624.  p.x = corX[i];
  625.  p.y = corY[i];
  626.  p.z = corZ[i];
  627.  cube.addChild(p);
  628.  dots[i] = p;
  629.  }
  630.  //Создаем грани куба.
  631.  for (var j:uint = 0; j < sides.length; j++)
  632.  {
  633.  var s:Sprite = new Sprite();
  634.  addChild(s);
  635.  sides[j] = s;
  636.  }
  637.  //Отрисовываем куб.
  638.  renderCube();
  639. }
  640.  
  641. //-------------------------------------------------------
  642. //Функция отрисовки куба.
  643. function renderCube():void
  644. {
  645.  //Создаем вспомогательные точки.
  646.  var point:Point = new Point();
  647.  var point3d:Vector3D = new Vector3D();
  648.  //Создаем массивы, которые будут хранить глобальные координаты вершин по Х и У.
  649.  var points2dX:Array = new Array(8);
  650.  var points2dY:Array = new Array(8);
  651.  //Переводим локальные координаты вершин куба в глобальные.
  652.  for (var i:uint = 0; i < dots.length; i++)
  653.  {
  654.  point = dots[i].local3DToGlobal(point3d);
  655.  points2dX[i] = point.x;
  656.  points2dY[i] = point.y;
  657.  }
  658.  //Создаем массив со списками вершин граней.
  659.  var vertices:Array = new Array(Vector.<Number>([points2dX[0], points2dY[0],
  660.  points2dX[1], points2dY[1],
  661.  points2dX[2], points2dY[2],
  662.  points2dX[3], points2dY[3]]),
  663.  Vector.<Number>([points2dX[1], points2dY[1],
  664.  points2dX[5], points2dY[5],
  665.  points2dX[6], points2dY[6],
  666.  points2dX[2], points2dY[2]]),
  667.  Vector.<Number>([points2dX[5], points2dY[5],
  668.  points2dX[4], points2dY[4],
  669.  points2dX[7], points2dY[7],
  670.  points2dX[6], points2dY[6]]),
  671.  Vector.<Number>([points2dX[4], points2dY[4],
  672.  points2dX[0], points2dY[0],
  673.  points2dX[3], points2dY[3],
  674.  points2dX[7], points2dY[7]]),
  675.  Vector.<Number>([points2dX[4], points2dY[4],
  676.  points2dX[5], points2dY[5],
  677.  points2dX[1], points2dY[1],
  678.  points2dX[0], points2dY[0]]),
  679.  Vector.<Number>([points2dX[3], points2dY[3],
  680.  points2dX[2], points2dY[2],
  681.  points2dX[6], points2dY[6],
  682.  points2dX[7], points2dY[7]]));
  683.  //Отрисовываем грани куба.
  684.  for (var j:uint = 0; j < sides.length; j++)
  685.  {
  686.  sides[j].graphics.clear();
  687.  sides[j].graphics.beginFill(colors[j]);
  688.  sides[j].graphics.drawTriangles(vertices[j], indices, null, TriangleCulling.NEGATIVE);
  689.  sides[j].graphics.endFill();
  690.  }
  691. }
  692.  
  693. //--------------------------------------------------------
  694. //Функция ващения куба.
  695. function rotateCube(e:Event):void
  696. {
  697.  //Поворачиваем куб по оси У на один градус каждый кадр.
  698.  cube.rotationY -= 1;
  699.  //Отрисовываем новое положение куба.
  700.  renderCube();
  701. }
  702.  
  703.  
  704. //-----------------------------------------------------------------------
  705. //-----------------------------------------------------------------------
  706. //-----------------------------------------------------------------------
  707. //-----------------------------------------------------------------------
  708.  
  709.  
  710. //объявляем переменную с фигурой
  711.  
  712. var circle:Shape = new Shape();
  713.  
  714. //определяем стиль линии
  715.  
  716. circle.graphics.lineStyle(1, 0x000000);
  717.  
  718. //определяем цвет заливки, прозрачность
  719. circle.graphics.beginFill(0x0000FF, 0.5);
  720.  
  721. //рисуем круг с координатами .x = 0 , .y = 0 радиусом 50 пикселей.
  722. circle.graphics.drawCircle(0, 0, 50);
  723.  
  724. //добавляем наше "произвение искусства" на сцену
  725. addChild(circle);
  726.  
  727. //пишем функцию
  728. addEventListener(Event.ENTER_FRAME, e2f);
  729. function e2f (e:Event):void
  730. {
  731.    //изменяем координаты нашего круга в каждом кадре(об этом говорит событие ENTER_FRAME)
  732.  
  733.     circle.x = mouseX;
  734.     circle.y = mouseY;
  735. }
  736.  
  737. //пишем функцию, которая уменьшает наш объект по кручению колёсика мыши
  738.  
  739. stage.addEventListener(MouseEvent.MOUSE_WHEEL, m2w);
  740. function m2w (e:MouseEvent):void
  741. {
  742.   // width, height  = ширина, высота соответственно
  743.  
  744.     circle.width -= 1;
  745.     circle.height -= 1;
  746. }
  747. //пишем функцию, которая увеличивает наш объект по клику
  748. stage.addEventListener(MouseEvent.CLICK, c2);
  749. function c2 (e:MouseEvent):void
  750. {
  751.     circle.width += 1;
  752.     circle.height += 1;
  753. }
  754.  
  755. //-----------------------------------------------------------------------
  756. //-----------------------------------------------------------------------
  757. //-----------------------------------------------------------------------
  758. //-----------------------------------------------------------------------
  759.  
  760.  
  761. package {
  762.    import flash.net.URLLoader;
  763.    import flash.net.URLRequest;
  764.    import flash.display.*;
  765.    import flash.events.*;
  766.    import flash.text.*;
  767.  
  768.    public class Main extends Sprite {
  769.       private var api_id:Number=743131; // id вашего приложения
  770.       private var api_secret:String="sE4VlnFfSQ"; // секретный ключ
  771.       private var externalXML:XML;
  772.       private var loader:URLLoader = new URLLoader();
  773.       private var photoLoader:Loader = new Loader();
  774.       private var viewer_id:Number;
  775.       private var sig:String;
  776.       private var uid:String;
  777.       private var bdate_txt:TextField = new TextField();
  778.       private var name_txt:TextField = new TextField();
  779.  
  780.       public function Main():void {
  781.          // узнаём id пользователя, который просматривает приложение
  782.          var params:Object=LoaderInfo(root.loaderInfo).parameters;
  783.          viewer_id = (params['viewer_id']) ? parseInt(params['viewer_id']) : 1;
  784.          // получаем профиль этого пользователя
  785.          getProfile(viewer_id);
  786.       }
  787.  
  788.       private function getProfile(uid):void { // функция получения профиля
  789.          sig=MD5.encrypt(viewer_id+'api_id='+api_id+'fields=bdate,photo_bigmethod=getProfilesuids='+uid+'v=2.0'+api_secret);
  790.          var request:URLRequest=new URLRequest("http://api.vkontakte.ru/api.php?api_id="+api_id+"&method=getProfiles&uids="+uid+"&fields=bdate,photo_big&v=2.0&sig="+sig);
  791.          loader.load(request);
  792.          loader.addEventListener(Event.COMPLETE, onComplete);
  793.       }
  794.  
  795.       private function onComplete(event:Event):void { // функция выполняется когда профиль был загружен
  796.          bdate_txt.text='';
  797.          if (loader!=null) {
  798.             externalXML=new XML(loader.data);
  799.             // отображаем дату рождения
  800.             var bdate = externalXML..bdate;
  801.             bdate_txt.text=bdate;
  802.             bdate_txt.x=490;
  803.             bdate_txt.y=380;
  804.             addChild(bdate_txt);
  805.  
  806.             // отображаем имя и фамилию
  807.             var uname = externalXML..first_name + ' ' + externalXML..last_name;
  808.             name_txt.text=uname;
  809.             name_txt.x=410;
  810.             name_txt.y=360;
  811.             addChild(name_txt);
  812.  
  813.             // загружаем аватар
  814.             var photo = externalXML..photo_big;
  815.             var request2:URLRequest=new URLRequest(photo);
  816.             photoLoader.load(request2);
  817.             photoLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, onloaded);
  818.  
  819.          } else {
  820.             trace("Error!");
  821.          }
  822.       }
  823.  
  824.       private function onloaded(e:Event):void {
  825.          // отображаем загруженный аватар
  826.          photoLoader.x = (550-photoLoader.width)/2;
  827.          photoLoader.y = (400-photoLoader.height)/2;
  828.          addChild(photoLoader);
  829.       }
  830.  
  831.    }
  832. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement