AS3Coding

Блог от AS3Coder'a о Flash, Flex, AIR, FlashDevelop, AS2, AS3, MXML, JSFL...

четверг, 22 августа 2013 г.

Отдам блог в хорошие руки

Здравствуйте, дорогие читатели.

Вынужден признать, что блог давно заброшен. Тем не менее посетители оставляют комментарии и присылают письма с вопросами. К сожалению в большинстве случаев они остаются без ответа в связи с критической нехваткой времени. Пользуясь случаем приношу свои извинения.

В продолжение всего выше сказанного хочу делегировать полномочия автора.
Все подробности на as3coder@gmail.com

пятница, 2 декабря 2011 г.

Сохранение звука с микрофона на ActionScript 3.0

То, что недавно казалось фантастикой, сегодня уже реальность. Начиная с версии FlashPlayer'a 10.1 у класса Microphone появилось событие sampleData.

SampleDataEvent

Это событие отправляется когда в буфере микрофона появляются аудио-данные. Событие имеет свойство data, которое содержит образцы записанных с микрофона данных. Естественно данные приходят в сыром формате. И проиграть их вне FlashPlayer'a не получиться. Поэтому их необходимо декодировать, предварительно собрав необходимое количество в бинарный массив ByteArray.

//
// Объявляем бинарный массив для хранения полученных с микрофона аудио-данных
var _samples_arr:ByteArray = new ByteArray();;
//
// Получаем экзмпляр микрофона
var _microphone:Microphone = Microphone.getMicrophone(-1);
//
// Вешаем обработчик события 
_microphone.addEventListener(SampleDataEvent.SAMPLE_DATA, onMicrophoneSampleData, false, 0, true);
//
// Обработчик обновления данных в микрофоне
function onMicrophoneSampleData (e:SampleDataEvent):void
{
  //
  // Добавляем полученные данные в биннарный массив
  _samples_arr.writeBytes(e.data);
}

Для начала выполним преобразование в .wav-формат.

WAVWriter

Специально для этого в Adobe написали класс WAVWriter.as. Останавливаться на нём не будем, потому что он довольно простой в использовании:
//
// Объявляем бинарный массив для данных .wav-файла
var wav_file:ByteArray = new ByteArray();
//
// Объявляем и настроиваем энкондер
var writer:WAVWriter = new WAVWriter();
writer.numOfChannels = 1;
writer.sampleBitRate = 16;
writer.samplingRate = 44100;
//
// Декодируем данные с микрофона в wav-формат
writer.processSamples(wav_file, _samples_arr, 44100, 1);

Теперь, фактически получив бинарные данные аудио-файла в .wav-формате, казалось бы мы выполнили задачу и остается только сохранить их в файл. 

Но мы пойдем дальше. И рассмотрим преобразование наших данных в .mp3-формат. Да, такое уже возможно и реализовано. Говорим спасибо Cyril Diagn за его работу в этом направлении, а именно проект Shine MP3 Encoder on Alchemy.

Shine MP3 Encoder on Alchemy

Это .swc-библиотека с классом ShineMP3Encoder для преобразования данных из .wav-формата в .mp3. Код портирован с помощью Alchemy из энкодера написанного на С, автором которого является Gabriel Bouvigne.

Пример использования:
//
// Обнуляем позицию в массиве .wav-файла
wav_file.position = 0;
//
// Объявляем mp3-энкодер
var _mp3_encoder:ShineMP3Encoder = new ShineMP3Encoder(wav_file);
//
// Вешаем обработчики событий
_mp3_encoder.addEventListener(Event.COMPLETE, onMP3EncoderComplete, false, 0, true);
_mp3_encoder.addEventListener(ProgressEvent.PROGRESS, onMP3EncoderProcess, false, 0, true);
//
// Начинаем кодирование
_mp3_encoder.start();
//
// Обработчик процесса кодирования
function onMP3EncoderProcess (e:ProgressEvent):void
{
  trace("Encoding to mp3 ... " + Math.ceil(e.bytesLoaded * 100 / e.bytesTotal) + "%");
}
//
// Обработчик завершения кодирования
function onMP3EncoderComplete (e:Event):void
{
  trace("Encoding to mp3 complete!")
}

Теперь, после преобразования мы можем сохранить .mp3-файл штатными средствами энкодера. Для этого имеется метод saveAs()
_mp3_encoder.saveAs('record.mp3');

Если же есть необходимость отправить полученный .mp3-файл на сервер, мы можем сделать это самостоятельно, получив его данные во свойстве mp3Data.
var mp3_file:ByteArray = _mp3_encoder.mp3Data;

Ну и как обычно, простейший пример всего вышеописанного:


Ссылки по теме:
       

вторник, 25 октября 2011 г.

Доверенные .swf-файлы

С недавнего времени в контекстном меню FlashPlayer'a появился новый пункт "Глобальные настройки". А именно с версии 10.3.



Если с "Хранилищем", "Камерой и микрофоном" и "Воспроизведением" всё понятно (они итак были доступны в пункте "Параметры..."), то вот во вкладке "Дополнительно" появились доколе неизвестные настройки.

Подробнее я хочу остановить на "Настройках доверенной папки..."



Что за доверенная папка?

На самом деле слово "папки" немного вводит в заблуждение. Естественно здесь указываются .swf-файлы, которым пользователь явно доверяет. А именно:
  • домен, с которого загружаются .swf-файлы,
  • путь к локальному .swf-файлу на компьютере пользователя,
  • путь к локальному каталогу, в котором содержаться .swf-файлы
И что же мы доверяем (разрешаем) указанным файлам?

С версии 10.1 локально запущенным .swf-файлам запрещается загружать данные из сети и из локального диска пользователя. Так вот указав, что этот .swf-доверенный ему разрешается делать эти запросы.

Сделано это для того, чтобы на этапе разработки было не обязательным постоянно выкладывать приложение на сервер.

Для чего указывается домен и что мы ему доверяем, я так и не разобрался. В cправке тоже ничего по поводу доменов. Может разрешаем локальным .swf-файлам загружать данные с этого домена? Не знаю. Не проверял. Может быть вы знаете?


К чему я завел этот разговор?

Недавно пришлось вернуться к одному старому проекту. Проект представляет собой простую презентацию с видео и небольшим каталогом. И вот тут, я столкнулся с тем, что главный .swf-файл зашитый в .exe-файл FlashPlayer'a не может подгрузить данные с каталога, который лежит рядом. Получаю сообщение с ошибкой о нарушении политики безопасности. Удивление конечно было огромным, когда я узнал, что в новых версиях плеера этого делать нельзя.

Чтож? Пришлось разбираться...

Как лечиться?

Ну во-первых, указать доверенный .swf-файл может сам пользователь в соотвествующем окне, о котором я говорил выше.

Во-вторых, можно сделать это за пользователя (естественно с помощью каких-то оберток или стартеров). Для этого в системе (в качестве примера возьму Windows 7, об остальных операционных системах информацию можно найти в справке) имеются каталоги, в которых хранятся .cfg-файлы конфигурации безопасности FlashPlayer'a. Таких каталогов два:

1. Для всех учетных записей системы.

C:\WINDOWS\system32\Macromed\Flash\FlashPlayerTrust

2. Для конкретного пользователя.

C:\Users\JohnD\AppData\Roaming\Macromedia\Flash Player\#Security\FlashPlayerTrust

В эти каталоги можно добавлять свои .cfg-файлы с любым именем. Простой текстовый файл, где каждая строчка - это путь до доверенных .swf-файла или папки.

Все современные среды разработки создают свои .cfg-файлы и при создании проекта дописывают в него в качестве доверенной папки папку нового проекта. Именно поэтому многие не заметили этого нововведения. Например FlashDevelop создает вот этот файл:

C:\Users\AS3Coder\AppData\Roaming\Macromedia\Flash Player\#Security\FlashPlayerTrust\FlashDevelop.cfg

А для профилактики подобных ситуаций автор кода может узнать каким образом запущен .swf-файл. Для этого существует свойство Security.sandboxType

Итого

Adobe окончательно уводит FlashPlayer с локального использования в веб. Не пишите больше локальных приложений для него, без оберток, таких как Zinc или AIR.

       

вторник, 25 января 2011 г.

Политика безопасности во Flash Player. Наиболее частные столкновения.

Часто вы сталкивались с ситуацией, когда ваш код не работает по непонятным причинам? Вам кажется, что всё уже проверено сотни раз и вы с уверенностью говорите себе, что здесь нет ошибок, и уже готовы биться головой о клавиатуру :) Спешу вас утешить, скорее всего ошибка не в коде.

В чем же дело?

А дело может быть в том, что вы нарушаете политику безопасности Flash Player, сами того не зная. Иногда Flash Player просто промолчит об этом :)

Как это предупредить?

Если что-то не работает, а по логике должно - идите в справку. Там кроются все ответы на ваши вопросы. Вообще справка должна быть неотъемлемым инструментом разработчика.

В этом посте я хочу рассказать о наиболее частых нарушениях политики безопасности, с которыми мы сталкиваемся.

Загрузка контента с доменов отличных, о того с которого запущена страница с .swf-файлом

*.load();

Практически на весь загружаемый контент с других доменом и даже поддоменов накладываются ограничения на загрузку, отображение или исполнения сценариев (если вы загружаете исполняемый .swf-файл). Например, .swf-файл не выполнит свой сценарий, если вы загрузили его без разрешения.

BitmapData.draw();

Метод не отрисует дисплей объект, если в нем есть загруженный контент с другого домена без разрешения. Это касается дочерних элементов класса Loader, и даже TextField, если в нем есть картинки вставленные посредством HTML-разметки.

Возможно эти ограничения действуют и в других методах, с которыми я не сталкивался. Так что если, что-то упустил - добавляйте в комментариях.

Как получить разрешение?

Домен, с которого вы грузите контент, должен разрешить вам использовать его. Делается это двумя способами в зависимости от типа загружаемого контента.

1. checkPolicyFile

Это файл, где перечислены домены, которым разрешено использовать контент. Называться такой файл должен сrossdomain.xml и лежать в корне сайта. Содержимое должно выглядеть следующим образом:

<?xml version="1.0"?>
<cross-domain-policy>
<allow-access-from domain="
yoursite.com"/>
</cross-domain-policy>

Когда .swf-файл, запущенный с вашего домена, пытается выполнить запросы на другой домен, Flash Player делает автоматически делает запрос на сrossdomain.xml расположенный на другом домене. Если в нем указано разрешение для вашего домена, то Flash Player разрешит в полной мере выполнять запросы.

2. Security.allowDomain() или Security.allowInsecureDomain()

Этот способ предусмотрен для исполняемых .swf-файлов. Если Flash Player встретит в сценарии метод Security.allowDomain() или Security.allowInsecureDomain() (для https-протокола) с параметром равным доменному имени вашего сайта, то он разрешает исполнение сценариев на вашем сайте.

System.allowDomain("yoursite.com");

Взаимодействие с клиентским окружением

Еще одной из частых и самых болезненых, является ситуация когда не выполняются методы никак не связанные с сетью. Болезнь заключается в том, что Flash Player, просто молчит о нарушениях. Приведу список наиболее частых методов, в которых мы сталкиваемся с этим.

FileReference.browse();

Метод не выполнится, если внутри .swf-файла не было события нажатия клавиши мыши.

SharedObject.flush();

Метод не выполнится если размер .swf-файла встроенного на страницу меньше окна с параметрами Flash Player'a (215 x 128).

LocalConnection.send();

Метод не выполнится если вкладка со страницей, на которой запущен .swf-файл, неактивна.

Stage.displayState = StageDisplayState.FULL_SCREEN;

Метод не выполнится, если внутри .swf-файла не было события нажатия мыши.


...

Если вы сталкивались еще с чем-то подобным, пишите в комментарии я дополню этот список.

Доступ к HTML-окружению на странице

.swf-файл загруженный с другого домена (даже с разрешением) не имеет доступ к HTML-окружению на вашей странице. Для этого ему нужно разрешение. Только на этот раз, вы выдаете его сами.

При вставке .swf-файла на страницу необходимо указать параметр AllowScriptAccess с соответствующим параметром:
  • always - Разрешает доступ всем .swf-файлам
  • sameDomain - Разрешает доступ .swf-файлами, загруженным с того же домена, что и страница
  • never - Запрещает доступ всем .swf-файлам
<embed AllowScriptAccess="always" height="100" src="http://www.foreigndomain.com/example.swf" type="application/x-shockwave-flash" width="100"></embed>

Внимание: Учтите, когда вы открываете доступ к HTML-окружению .swf-файлам с неизвестных вам доменов, вы подвергаете всю безопасность на вашей страницы.

Дополнительный материал для изучения

Для более детального ознакомления со всеми правилами безопасности Flash Player, вы можете заглянуть официальную справку на русском языке в раздел "Безопасность проигрывателя Flash Player".

Также смотрите спецификацию по файлу crossdomain.xml
      

воскресенье, 28 ноября 2010 г.

Поездка в Челябинск на RAFPUG

Ровно неделю назад я со своим коллегой Виталием приехали с Челябинска, куда ездил на очередной RAFPUG проводимый компанией iHeroes. Написать отчет о поездке сразу не получилось, как всегда было много работы. И сегодня таки появилось несколько свободных минут.

Прямых поездов или самолетов на 19-20 ноября из Казани в Челябинск не оказалось. Решено было ехать на машине. 1000 км туда - 1000 км обратно. Поэтому поездку можно даже назвать маленьким путешествием :)

Приехали мы в Челябинск с опозданием, минут на 40 и все-таки успели на первый доклад.

Первым выступал Роман Куликов, он представлял своё издательство i-Jet Media.



Доклад получился очень насыщенным и интересным. Например было интересно узнать, что:
  • «Счастливый фермер» заработал за 2009 год 20 000 000 долларов.
  • Cредняя продолжительность игрового проекта в социальных сетях - это около 6 месяцев.
  • Азиаты - одни из самых платежеспособных наций.
  • И многое другое...
Следующим выступал Илья Алябушев из компании Flexis.



Его доклад был посвящен методу организации работы с помощью технологии Scrum. Доклад получился больше технический, с кучей новых терминов и непонятных слов :) Тем не менее у Ильи получилось в общих чертах истолковать идею Scrum, за что ему огромное спасибо.

Следующей темой собрания была «Инди-разработка». Ею с нами поделился Алексей Давыдов из компании Flazm.



Он повествовал, что же это такое «инди». Немного запутал конечно, но суть ясна: "Инди-разработчик - это тот, который работает только на себя" :) Рассказал о плюсах и минусах этого направления. В общем было что послушать.

Следующей вышла Анна Сенина, организатор встречи и представитель компании iHeroes.



Анна рассказала о том:
  • что такое Аква3D, над которым они работают уже около года, 
  • как устроена организация работы в их команде, 
  • как они используют для этого Scrum, о котором рассказывал Илья Алябушев.
Ну и самый ожидаемый доклад Антона Волкова - отца 3D-движка Alternativa3D.


Лет пять назад, изучая Flash мне часто попадались его исходники, и именно его доклад вызывал у меня больший интерес. Мне хотелось увидеть его живьем :) Кстати когда я зашел в зал из AlternativaPlatform я узнал только Александра Карповича, и в какой-то момент даже испугался что Волкова сегодня не будет. Но мои сомнения развеялись, чуть позже Антон приехал вместе с Владимиром Бабушкиным.

Доклад Антона получился конкретно по делу, ничего лишнего. Он рассказал о том как становилась компания AlternativaPlatform, как развивалось 3D во FlashPlayer, как они попали на Adobe Max, какое они имеют отношению к новому плееру под кодовым именем "Molehill", как придется работать с 3D API во нем, когда он будет доступен в релизе. Показал готовые демки на новом плеере, а также повествовал о планах компании. В общем рассказал всё, что было интересно публике.

Из его доклада я выдели две важные вещи:
  • Ожидать новый плеер в бете можно весной 2011 года, в релизе - не раньше лета 2012.
  • Сейчас можно без опасений на будущее использовать 7 версию движка, т.к. AlternativaPlatform обещают безболезненный переход на 8 версию.
После доклада Антона, нам пришлось уехать чтобы успеть на ночлег в Уфе. И мы пропустили доклад Владимира Бабушкина с Евгением Сушковым и блиц-доклад Максима Фирсова, а также выпивания в ближайшем кафе, о чем сильно жалеем :(

Кстати еще больше мы пожалели об этом, когда выехали из Челябинска и уже спустя час на трассе началась настоящая пурга. Дорога превратилась каток, дальше пяти метров ничего не видно. Плюс сотрудники гибдд перекрывают трассу, до приезда дорожных служб. В какой-то момент даже приходила мысль переночевать в машине на обочине. Но спустя пару часов, мы дождались дорожную службу, которая полила дорогу специальным составом и легковые машины пустили. Так при скорости 30-60 км./ч. часов за шесть часов мы все-таки добрались до окрестностей Уфы. Переночевали, и снова в дорогу :) Вечером были в Казани.

Также смотрите отчет и фотки от Анны Сениной. Организаторам встречи огромное спасибо :)
       

воскресенье, 24 октября 2010 г.

Отладка AS3-приложений с помощью FireFlash

Что такое FireFlash?

FireFlash - это плагин для FireBug'а, с помощью которого можно легко и удобно отлаживать свои приложения.

Что такое FireBug?

FireBug - это расширение для браузера Mozilla Firefox. Используется он для отладки web-приложений и пожалуй является самым сильным инструментом в этой области. Попробовав раз, отказаться от него уже не сможешь :)

Что умеет FireFlash?

FireFlash предоставляет .swf-файлам на странице доступ к консоли FireBug'a. С возможностями добавлять в консоль и окно Output используемого редактора ActionScript 3.0 записи разных типов:
  • Записи журнала
  • Информационные сообщения
  • Сообщения об опасности
  • Деревья объектов
  • ...
Как установить FireFlash?

Первым делом нужно установить Mozilla Firefox, если такого не имеется. Скачать его можно с официального сайта http://www.mozilla.com/.

Во-вторых, нужно поставить плагин FireBug не ниже версии 1.4.5. Установить его можно на соответствующей странице https://addons.mozilla.org/en-US/firefox/addon/1843/. После установки в правом нижнем углу браузера появится соответствующая иконка для открытия окна FireBug'a.



В-третьих нужно поставить сам FireFlash. Сделать это можно также со страницы дополнений к Mozilla Firefox по адресу https://addons.mozilla.org/en-US/firefox/addon/55979/. В правом верхнем углу содержимого FireBug'a вы увидите вот такую иконку.



Как обращаться к FireFlash из ActionScript 3.0?

Для этого имеется библиотека классов com.actionscript_flash_guru.* В ней имеется единственный необходимый нам класс com.actionscript_flash_guru.fireflashlite.Console.as, который содержит в себе различные методы для работы с FireFlash. Скачать архив с библиотекой можно с официальной страницы. А также можно подписаться на уведомления об обновлении библиотеки в Twitter.

А можно по-подробнее?
/**
 * 
 */
/**
 * Блокирует вывод сообщений в окно Output внутри используемого FrameWork
 * Другими словами класс консоли не регистриует свои сообщения при помощи фунции trace();
 */
Console.disableIdeTrace();
/**
 * 
 */
/**
 * Метод выводит в консоли FireBug'a содержимое объекта в виде дерева,
 * а также дублирует его в окне Output
 * 
 * @param Ссылка на объект
 * @param Количество вложенностей дерева
 * @param Сопутствующее сообщений
 */
Console.dir(obj, 3, "Custom message");
/**
 * 
 */
/**
 * Метод выводит в консоли FireBug'a содержимое xml-строки,
 * а также дублирует его в окне Output
 * 
 * @param Строка xml-узла
 * @param Сопутствующее сообщений
 */
Console.dirxml(xml, "Custom message");
/**
 * 
 */
/**
 * Метод выводит в окно Output сообщение с меткой ошибки, 
 * ссылкой на класс и метод инициализировавший ошибку
 * 
 * @param Строка с сообщением об ошибке
 */
Console.error("Error message");
/**
 * 
 */
/**
 * Метод созает таймер с заданным идентификатором и начинает отсчет.
 * Для того чтобы, остановить таймер необходимо 
 * использовать метод timeEnd();
 * 
 * @param Идентификатор таймера
 */
Console.time("your_id");
/**
 * 
 */
/**
 * Метод останавливает таймер c заданым идентификатором.
 * Выводит информационное сообщение в консоль FireBug'a
 * с указанием имени .swf-файла, идентикатора таймера и его значения.
 * А также дублирует сообщение в окно Output с соответвующей меткой
 */
Console.timeEnd("your_id");
/**
 * 
 */
/**
 * Метод проверяет условие, и если оно ложное 
 * выводит указанное сообщение в окно Output
 * 
 * @param Условие
 * @param Сообщение для ложного значения
 */
Console.assert(false, "Messages for the false values");
/**
 * 
 */
/**
 * Метод выводит в окно Output сообщение с
 * ссылкой на класс и метод инициализировавший вызов
 * 
 * @param Строка с сообщением об ошибке
 */
Console.stackTrace();
/**
 * 
 */
/**
 * Метод выводит простое сообщение в консоль FireBug'a, 
 * а также дублирует его в окно Output с соответствующей меткой
 * 
 * @param Текстовое сообщение
 */
Console.log("Simple message");
/**
 * 
 */
/**
 * Метод выводит информационное сообщение в консоль 
 * FireBug'a с соответствующей иконкой, а также дублирует 
 * его в окно Output с соответствующей меткой
 * 
 * @param Информационное сообщение
 */
Console.info("Information message");
/**
 * 
 */
/**
 * Метод выводит сообщение об опасности в консоль 
 * FireBug'a с соответствующей иконкой, а также дублирует 
 * его в окно Output с соответствующей меткой
 * 
 * @param Cообщение об опасности
 */
Console.warn("Warning message!");
/**
 * 
 */
/**
 * Метод дублирует поведение метода log();
 */
Console.debug("Simple message");
/**
 * 
 */
/**
 * Метод добавляет в консоли FireBug'а блок для группы
 * с заданным названием, а также дублирует соответсвующую 
 * запись в окне Output
 * 
 * @param Названия для группы
 */
Console.group("Group name");
/**
 * 
 */
/**
 * Метод дублирует поведение метода Console.group();
 * только блок будет иметь закрытое состояние
 */
Console.groupCollapsed("Group name");
/**
 * 
 */
/**
 * Метод закрывает блок, открытый ранее
 * Используется только после вызова методов 
 * Console.group(); и Console.groupCollapsed();
 */
Console.groupEnd();

А как-же пример?

Откройте консоль FireBug'a и понажимайте на кнопки из примера. Вы должны увидеть результат примеров.



Дополнительно

Более подробно ознакомиться с FireFlash можно на его официальной странице

Огромное спасибо за новый инструмент Nicholas Dunbar, надеюсь его работа прижевется в руках разработчиков ActionScript-приложений. А также спасибо Flastar'у за информацию о существовании инструмента.
        

среда, 6 октября 2010 г.

Проверка орфографии в ActionScript 3.0

24 сентября 2010 года на сайте лаборатории Adobe обновился проект "Squiggly". Обновили проект до 4-ой пререлизной версии. О нем я услышал впервые, и очень им заинтересовался. Теперь хочу подделиться с вами.

Что такое проект "Squiggly"?

Это набор .swc-библиотек для работы с орфографией во Flash, Flex и AIR проектах. Название переводится как "волнистые" с намеком на то, что неправильные слова подчеркиваются именно этой линией.

Что он дает?

Возможности анализа текста в ActionScript 3.0.

Какие возможности?

Проверка орфографии и правил языка, варианты исправления неправильных слов.

На чем основан проект?

За основу взят проект "Hunspell".

Что это означает?

Это означает, что нам можно использовать уже готовые словари из других программ, основанных на этой же основе. Таких как: OpenOffice, Mozilla FireFox, Opera и многих других. Например, словари от Mozill'ы можно найти здесь. Но прежде чем использовать словари сторонних программ, пожалуйста ознакомьтесь с лицензионными соглашениями.

Как это работает?

Рассмотрим по-подробнее чистый ActionScript 3.0 проект. Загружаем архив с библиотеками. Нам понадобиться только одна из них: AdobeSpellingEngine.swc (Остальные предназначены для Flex-проектов). Подключаем её у нашему проекту.

Первым делом нужно загрузить словари с орфографией и правилами.

//
// Создаем экземпляр словаря
dictionary = new HunSpellDictionary();
//
// Добавляем обработчик события загрузки библиотек
dictionary.addEventListener(Event.COMPLETE, onDictanionaryComplete, false, 0, true);
//
// Грузим библиотеки
dictionary.load("dictionaries/en_US/en_US.aff", "dictionaries/en_US/en_US.dic");

После того, как словари загружены, в обработчике нужно создать объект который будет проверять орфографию слов.

/**
 * Метод обрабатывает событие успешной загрузки библиотек для словаря
 * Создает экземпляр объекта для проверки слов
 */
private function onDictanionaryComplete (e:Event):void
{
  //
  // Создаем экземпляр объекта для проверки слов, в параметре указываем ссылку на словарь
  spell_checker = new SpellChecker(dictionary);
}

Чтобы проверить какое-то слов нужно вызвать у проверяющего объекта метод checkWord();

spell_checker.checkWord("heloo");

Чтобы получить список возможных исправлений для слова имеется метод getSuggestions();

spell_checker.getSuggestions("heloo");

А как проверить содержимое текстового поля и подчеркнуть неправильные слова?

Алгоритм примерно такой:
  1. Разбиваем строку содержимого на список слов (В элементах списка нужно иметь значение слова, индекс первого символа и последнего).
  2. В цикле пробежаться по списку.
  3. Определить ошибочное слово.
  4. Зная индексы крайних символов с помощью метода TextField.getCharBoundaries() вычислить координаты слова
  5. Наложить на текстовое поле новый слой, в котором нарисовать волниcтые линии.

А пример?



Дополнительная информация

Обо мне



Farid Shamsutdinov (AS3Coder)
Russia, Tatarstan, Kazan
as3coder@gmail.com

Подробнее...

Постоянные читатели

Поиск по блогу

Загрузка...