Капча при помощи расширения класса Sprite и библиотек vk.gui

Только готовые уроки по использованию ВКонтакте API. Flash + PHP + API. НЕ IFrame!

Капча при помощи расширения класса Sprite и библиотек vk.gui

Сообщение Nick Lisogor » 25 янв 2011, 18:57

Капча при помощи расширения класса Sprite и библиотеки vk.gui

В этом уроке вы узнаете, как создать капчу при помощи класса Sprite, Array и TextField, также нам потребуется библиотека vk.gui.

1. Создаём Новый документ Flash File (ActionScript 3.0)
Сохраняем *.fla файл.

2. Скачиваем библиотеку vk.gui:
http://vkontakte.ru/source/vk_gui-0.5.zip
Папку ./src/vk из архива перемещаем в папку с сохраненным fla.

3. Создадим класс самой капчи и назовем его Captcha.as с таким кодом (код прокомментирован):

  1. //
  2. //@Автор: Nick Lisogor , специально для Flapps.Ru
  3. //
  4. package
  5. {
  6.     import flash.display.*;
  7.     import flash.events.*;
  8.     import flash.text.*;
  9.    
  10.     import vk.gui.*;
  11.    
  12.     public class Captcha extends Sprite
  13.     {
  14.         private var captcha:Sprite;
  15.         private var captcha_field:TextField;
  16.         private var captcha_input:InputField;
  17.         private var symbols:Array;
  18.         private var captcha_text:String;
  19.        
  20.         private var type:Array;
  21.         private var symbols_count:int;
  22.         private var font_style:String;
  23.         private var font_color:uint;
  24.         private var font_size:int;
  25.         private var font_bold:Boolean;
  26.         private var captcha_color:uint;
  27.         private var captcha_border_color:uint;
  28.         private var captcha_width:int;
  29.         private var captcha_height:int;
  30.        
  31.         public function Captcha(x_:int, y_:int, width_:int, height_:int, font_style_:String, font_color_:uint, font_size_:int, font_bold_:Boolean, captcha_color_:uint, captcha_border_color_:uint, symbols_count_:int, type_:Array):void
  32.         {
  33.             this.x = x_;
  34.             this.y = y_;
  35.             captcha_width = width_;
  36.             captcha_height = height_;
  37.             font_style = font_style_;
  38.             font_color = font_color_;
  39.             font_size = font_size_;
  40.             font_bold = font_bold_;
  41.             captcha_color = captcha_color_;
  42.             captcha_border_color = captcha_border_color_;
  43.             symbols_count = symbols_count_;
  44.             type = type_;
  45.             addEventListener(Event.ADDED_TO_STAGE, onAddedToStage);
  46.         }
  47.        
  48.         private function onAddedToStage(event:Event):void
  49.         {
  50.             removeEventListener(Event.ADDED_TO_STAGE, onAddedToStage);
  51.            
  52.             //Создали массив
  53.             symbols=new Array();
  54.            
  55.             //Сделали проверку на тип, указанный при создании экземпляра класса
  56.             for(var i in type)
  57.             {
  58.                 if(type[i] == "A-Z")
  59.                     symbols.push("A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z");
  60.                 else if(type[i] == "a-z")
  61.                     symbols.push("a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z");
  62.                 else if(type[i] == "0-9")
  63.                     symbols.push("0","1","2","3","4","5","6","7","8","9");
  64.                 else
  65.                     trace("Ошибка, группы симболов указаны не верно");
  66.             }
  67.            
  68.             //Создали капчу
  69.             captcha = new Sprite();
  70.            
  71.             //При помощи библиотеки vk.gui создали квадрат в ней
  72.             vk.gui.Utils.rect(captcha,0,0,captcha_width,captcha_height,captcha_color,captcha_border_color,0.9);
  73.            
  74.             //Добавили ее на сцену
  75.             addChild(captcha);
  76.            
  77.             //Добавили в нее код
  78.             addSymbols();
  79.            
  80.             //Создали экземпляр класса InputField
  81.             captcha_input = new InputField(0,captcha_height,captcha_width,1,true,true);
  82.             captcha_input.addEventListener(InputField.EVENT_MODIFIED, inputListener);
  83.             //captcha_input.value = "введите код";
  84.            
  85.             //Добавили его на сцену
  86.             addChild(captcha_input);
  87.         }
  88.        
  89.         private function addSymbols():void
  90.         {
  91.             //Чистим текст капчи
  92.             captcha_text = "";
  93.            
  94.             //При помощи цикла, добавляем к переменной captcha_text рандомный элемент из массива symbols
  95.             for(var i:int = 0; i < symbols_count; i ++)
  96.                 captcha_text += symbols[Math.floor(Math.random() * symbols.length)];
  97.            
  98.             //Создаем экземпляр класса TextField и задаем ему нужные параметры
  99.             captcha_field = new TextField();
  100.             captcha_field.multiline = false;
  101.             captcha_field.selectable = false;
  102.             captcha_field.defaultTextFormat = new TextFormat(font_style, font_size, font_color, font_bold);
  103.             captcha_field.text = captcha_text;
  104.             captcha_field.width = captcha_field.textWidth + font_size/3;
  105.             captcha_field.height = captcha_field.textHeight + font_size/4;
  106.             captcha_field.x = (captcha.width - captcha_field.width) / 2;
  107.             captcha_field.y = (captcha.height - captcha_field.height) / 2;
  108.            
  109.             //Добавляем в капчу этот TextField
  110.             captcha.addChild(captcha_field);
  111.            
  112.             //Включаем слушатель мыши
  113.             captcha.addEventListener(MouseEvent.CLICK, clickHandler);
  114.         }
  115.        
  116.         //Слушатель мыши
  117.         private function clickHandler(event:MouseEvent):void
  118.         {
  119.             captchaRefresh();
  120.         }
  121.        
  122.         //Обновление капчи
  123.         private function captchaRefresh():void
  124.         {
  125.             //Выключаем слушатель мыши
  126.             captcha.removeEventListener(MouseEvent.CLICK, clickHandler);
  127.            
  128.             //Удаляем из капчи TextField
  129.             captcha.removeChild(captcha_field);
  130.            
  131.             //Добавляем в неё новый TextField
  132.             addSymbols();
  133.            
  134.             //Очищаем inputField
  135.             captcha_input.value = "";
  136.         }
  137.        
  138.         //Слушатель поля ввода текста
  139.         private function inputListener(event:Event):void
  140.         {
  141.             checkCaptcha(event.target.value);
  142.         }
  143.        
  144.         //Функция проверки капчи: принимает введенный текст в формате String и возвращает true,
  145.         //если текст совпадает с текстом капчи,иначе возвращает false
  146.         private function checkCaptcha(text_:String):Boolean
  147.         {
  148.             if(text_ == captcha_text)
  149.             {
  150.                 MovieClip(parent).addLog("Код верный, вы ввели: "+text_);
  151.                 return true;
  152.             }
  153.             else
  154.             {
  155.                 MovieClip(parent).addLog("Код не верный, вы ввели: "+text_);
  156.                 captchaRefresh();
  157.                 return false;
  158.             }
  159.         }
  160.     }
  161. }


4. Создадим новый класс и назовем его Test.as , вписав туда такой код:

  1. package
  2. {
  3.     import flash.display.MovieClip;
  4.     import flash.text.TextField;
  5.    
  6.     public class Test extends MovieClip
  7.     {
  8.        
  9.         private var captcha:Captcha;
  10.         private var text_field:TextField;
  11.         private var log:Array;
  12.        
  13.         public function Test():void
  14.         {
  15.             captcha = new Captcha(10,20,100,30,"Sans-serif",0x000000,16,true,0xF7F7F7,0xCCCCCC,8,["A-Z","a-z","0-9"]);
  16.             addChild(captcha);
  17.            
  18.             log = new Array("Лог действий");
  19.            
  20.             text_field = new TextField();
  21.             text_field.x = 150;
  22.             text_field.y = 0;
  23.             text_field.width = 300;
  24.             text_field.text = log.toString();
  25.             addChild(text_field);
  26.         }
  27.        
  28.         public function addLog(_txt:String):void
  29.         {
  30.             if(log.length > 4)
  31.             {
  32.                 log.shift();
  33.             }
  34.             log.push("\n"+_txt);
  35.             text_field.text = log.toString();
  36.         }
  37.     }
  38. }

Подключаем Test.as к *.fla файлу.

В этом коде я вызываю капчу таким образом:

  1. captcha = new Captcha(x_капчи, y_капчи, ширина_капчи, высота_капчи, стиль_шрифта, цвет_шрифта, размер_шрифта, жирность_текста, цвет_капчи, цвет_границ_капчи, количество_симболов_в_капче, тип_капчи);
  2. addChild(captcha);


Тип капчи имеет 3 варианта ["A-Z"] - Все Большие Латинские буквы, ["a-z"] - все маленькие Латинские буквы, ["0-9"] - все цифры, либо же несколько вариантов сразу, к примеру ["a-z","0-9"]

4. Компилируем приложение и проверяем его (должно получиться вот так):

Изображение

Примечания:
- При клике на картинку, она обновляется
- InputField реагирует на клавишу Enter
- При проверки текста в InputField, капча вызывает функцию addLog(_txt:String) в главном MovieClip, который указан в *.fla файле. Здесь _txt - введенный в InputField текст в формате String.

Автор: Nick Lisogor, копи паст запрещен.
Услуги клиент-сервер(оптимальные цены)
Работаю с PHP, ActionScript 3, JavaScript.

За это сообщение автора Nick Lisogor поблагодарили - 2:
Александр, 112
Nick Lisogor
FL Team
FL Team
 
Сообщения: 119
Зарегистрирован: 12 дек 2010, 15:08
Благодарил (а): 10 раз.
Поблагодарили: 9 раз.

Чтобы убрать блок с рекламой, зарегистрируйтесь на форуме или войдите.

Google
 


Вернуться в Уроки по использованию ВКонтакте API



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1