Блог от AS3Coder'a о JavaScript, HTML, CSS... и немного о Flash.

суббота, 17 октября 2009 г.

История развития языка ActionScript 3.0

Решил на выходных написать статью о развитии языка программирования ActionScript 3.0. Оказалось, что всё уже за меня написано :)
В “Справочнике по языку ActionScript 3.0 и его компонентам” есть целый раздел “История объектно-ориентированного программирования на языке ActionScript” с примерами и все подробностями.
  

четверг, 15 октября 2009 г.

Алгоритм Дейкстры на ActionScript 3.0

Столкнулся на работе с графами. Необходимо было найти кратчайший путь в заданном графе между двумя вершинами. Для решения задачи решил использовать алгоритм Дейкстры.

Алгоритм Дейкстры - алгоритм находит кратчайшее расстояние от одной из вершин графа до всех остальных. Алгоритм работает только для графов без рёбер отрицательного веса. Назван в честь изобретателя Эдсгера Дейкстры.

Поискал в гугле. Нашел вот этот вариант реализации алгоритма на Action Script. Казалось бы задача решена, но, при попытке скомпилировать пример, посыпались ошибки. Разбираться было некогда, пришлось писать самому :)

На сайте http://www.allbest.ru/ нашел курсовую работу "Программная реализация алгоритма Дейкстры (построение цепей минимальной длины)". Прочитав работу, немного поразмыслив, получилось следующее:



В итоге 4 класса:
  1. Vertex.as - класс для описания вершин.
  2. Edge.as - класс для описания связей.
  3. Graph.as - класс для описания графа.
  4. GraphMethods.as - статический класс с методами работы с графами. Пока только один метод getDijkstraPath(). Позже буду добавлять новые методы :)

graph.zip (3 Кб)

Как этим пользоваться?

Создаем вершины.

var vertex1:Vertex = new Vertex("v1");
var vertex2:Vertex = new Vertex("v2");
var vertex3:Vertex = new Vertex("v3");
var vertex4:Vertex = new Vertex("v4");
var vertex5:Vertex = new Vertex("v5");
...
Свяжем некоторые вершины, с указанием расстояния между ними.

var edge1:Edge = new Edge(vertex1, vertex3, 50);
var edge2:Edge = new Edge(vertex3, vertex4, 75);
var edge3:Edge = new Edge(vertex3, vertex5, 25)
...
Создаем граф.

var graph:Graph = new Graph();
Вершины и связи добавим на граф.
graph.addVertex(vertex1);
graph.addVertex(vertex2);
graph.addVertex(vertex3);
graph.addVertex(vertex4);
graph.addVertex(vertex5);
...
//
graph.addEdge(edge1);
graph.addEdge(edge2);
graph.addEdge(edge3);
Вычислим кратчайший путь от первой вершины до четвертой, используя алгоритм Дейкстры.

var path:/*Vertex*/Array = GraphMethods.getDijkstraPath(graph, vertex1, vertex4);
Вот и всё :)

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

среда, 7 октября 2009 г.

Flash JavaScript File (JSFL) - что это?

Еще в далеком 2004 году в Macromedia Flash MX на стартовой странице появился новый тип создаваемого файла - "Flash JavaScript File" (Далее "JSFL").


Для истории :)





Так что же это такое?

JSFL - это язык программирования сценариев для среды разработки Flash-приложений Macromedia Flash MX. (Теперь уже Adobe Flash CS4). Т.е. все команды, которые нам доступны при работе с .fla-файлами, мы можем собирать в сценарии и выполнять их автоматом. Например: создавать документы, редактировать их, компилировать и многое другое.

Для чего это нужно?

А нужно это для автоматизации процесса разработки Flash-приложений.

Например, при разработке очередного приложения в библиотеке документа накопилось 100 символов. В какой-то момент стало необходимо в 50-ти добавить постфикс "_img" в идентификаторе символа. Чтобы не делать это вручную, перебирая каждый символ, мы можем написать небольшой скрипт на JSFL, который всё это сделает за нас.

Попробуем в действии.

Создаем новый Flash Javascrip File. Открывается редактор кода.


JSFL основан на JavaScript и похож на ActionScript (Оба эти языка основаны на одном стандарте ECMAScript). Плюс ко всему, в левой части окна имеется подробный список классов с описанием методов и свойств.

Для примера, я написал скрипт, который бежит по библиотекам всех открытых документов, и в каждом символе типа "MovieClip" пронумеровывает слои и задает им цвета.

var LOCKED =              true;
var TITLE =               "_layer_"
var NORMAL_COLOR =        0xCCCCCC;
var GUIDE_COLOR =         0x66CCFF;
var GUIDED_COLOR =        0x3399FF;
var MASK_COLOR =          0x66FF00;
var MASKED_COLOR =        0x66CC00;
var FOLDER_COLOR =        0x666666;
//
var arr, doc, len, lib, chi, ite, cen, tim, lay, den, obj, str;
//
arr = fl.documents;
if (arr && arr.length)
{
  len = arr.length;
  for (var i = 0; i < len; i++)
  {
    doc = arr[i];
    if (doc)
    {
      lib = doc.library;
      if (lib)
      {
        chi = lib.items;
        if (chi)
        {
          cen = chi.length;
          for (var j = 0; j < cen; j++)
          {
            ite = chi[j];
            if (ite)
            {
              if (ite.itemType == "movie clip")
              {
                lib.editItem(ite.name);
                tim = fl.getDocumentDOM().getTimeline();
                if (tim)
                {
                  lay = tim.layers;
                  if (lay)
                  {
                    den = lay.length;
                    for (var a = 0; a < den; a++)
                    {
                      obj = lay[a];
                      if (obj)
                      {
                        obj.name = TITLE + (a + 1);
                        obj.locked = LOCKED;
                        //
                        str = obj.layerType;
                        //
                        if (str == "normal") obj.color = NORMAL_COLOR;
                        if (str == "guide") obj.color = GUIDE_COLOR;
                        if (str == "guided") obj.color = GUIDED_COLOR;
                        if (str == "mask") obj.color = MASK_COLOR;
                        if (str == "masked") obj.color = MASKED_COLOR;
                        if (str == "folder") obj.color = FOLDER_COLOR;
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}
Paint layers.jsfl

Для выполнения скрипта нужно нажать кнопку "Run Script"


И еще.

Начиная с Macromedia Flash 8 в верхнем меню появилась вкладка "Commands" (Где были команды в Macromedia Flash MX, к сожалению не помню).


Теперь полюбившийся JSFL-сценарий мы можем вызывать оттуда. Для этого необходимо переместить в директорию "Commands" нужный нам .jsfl-файл скрипта.

Расположение этой папки различается для разных систем. Windows 2000 или Windows XP: загрузочный диск\Documents and Settings\<пользователь>\Local Settings\Application Data\Adobe\Flash CS4\<язык>\Configuration\Commands. Mac OS® X: диск Macintosh/Users/<имя_пользователя>/Library/Application Support/Adobe/Flash CS4/<язык>/Configuration/Commands.


А также.

Создавать сценарии можно и не прибегая к программированию на JSFL.
Откройте окно "History" (CTRL+F10).


Оказывается, все наши действия сами записываются по пунктам в один сценарий на языке JSFL. Для того, чтобы сохранить его, необходимо выделить несколько пунктов и нажать кнопку "Save selected steps as a Command".


Дать имя:


Теперь команду можно найти во вкладке "Commands"


и в одноименной директории.


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

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

Обо мне



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

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

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

© 2014 Farid Shamsutdinov. При копировании материалов, ссылка на источник обязательна. Технологии Blogger.