Переход с Adobe Flash на FlashDevelop

Я разрабатываю веб-сайт, который должен взаимодействовать с приложением AIR, я разрабатываю с помощью javascript и мало знаю о ActionScript. Я нахожусь на ранних этапах этого и использую пробную версию Adobe Flash для создания некоторых файлов swf, которые могут взаимодействовать с javascript, код из окна действий выглядит следующим образом (большая часть его убрана из веб-примеров):

import flash.external.ExternalInterface;

var myText:String = "Example String";

ExternalInterface.addCallback("sendOutput", sendStaticTextFromAS3);
function sendStaticTextFromAS3():void {
    ExternalInterface.call("receiveTextFromAS3", myText);
}

Все, что это делает, - это получение вызова от javascript, отправка строки и вызов функции, которая будет с ней работать (она станет более сложной).

Моя проблема в том, что срок действия Flash скоро истечет, и для обеспечения будущего проекта, не тратя много средств на Flash, я хочу перейти на FlashDevelop. Поскольку мне не нужны никакие объекты на сцене, все, что мне нужно, - это редактировать ActionScript, поэтому FlashDevelop - это все, что мне нужно. Я создаю новый проект AS3 в FlashDevelop и получаю следующий код:

package 
{
    import flash.display.Sprite;
    import flash.events.Event;

    /**
     * ...
     * @author Will Thomas
     */
    public class Main extends Sprite 
    {

        public function Main():void 
        {
            if (stage) init();
            else addEventListener(Event.ADDED_TO_STAGE, init);
        }

        private function init(e:Event = null):void 
        {
            removeEventListener(Event.ADDED_TO_STAGE, init);
            // entry point
        }

    }

}

Я предполагаю, что Adobe Flash добавляет это автоматически при компиляции swf, поэтому я понятия не имею, куда должен идти мой код, кроме добавления import flash.external.ExternalInterface; на вершине?

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

Спасибо всем.


person will900    schedule 30.03.2012    source источник


Ответы (1)


Перед вами документ класса верхнего уровня - в данном случае файл .as, описывающий класс с именем Main, расширяющий Sprite (все документы верхнего уровня, которые будут скомпилированы в .swfs, расширяют Sprite или MovieClip).

Вы правы, Flash Professional в основном скрывает это от вас (хотя вы можете добраться до класса документа, если покопаетесь). Но Flash Professional - действительно творческий инструмент (для рисования / анимации). Хотя его можно использовать для написания кода ActionScript, это не обязательно его сильная сторона.

FlashDevelop - это бесплатная IDE (к сожалению, только для Windows), конкурирующая с Flash Builder. Они предназначены для разработки программного обеспечения ActionScript. Эти IDE очень удобны для новичков, поскольку они автоматически загружают и устанавливают все необходимые SDK, автоматизируют процесс сборки, предоставляют шаблоны проектов, автозавершение кода и отладку - все это есть в среде IDE.

Если вы предпочитаете, чтобы IDE помогала вам начать работу, то любой из них должен работать нормально (хотя, опять же, Flash Builder - это коммерческий инструмент, я считаю, что Flash Develop является бесплатным).

Однако обратите внимание, что вам не нужна IDE и вы можете использовать полностью бесплатные инструменты Adobe для компиляции файлов исходного кода .as в файлы .swf - используйте Adobe Flex SDK. Это компилятор командной строки, который работает в Windows, Mac и Linux, поэтому вы будете использовать любой текстовый редактор для редактирования ваших файлов .as. Если это ваш предпочтительный рабочий процесс, см. это руководство, чтобы начать работу.

Я также рекомендовал бы эта отличная статья для начала разработки флеш-игр - она ​​полна отличной информации и ссылок на руководства.

Что касается вашего вопроса о том, куда идет ваш код, да, импорт идет вверху с другими, ваш оператор addCallback находится под комментарием «точка входа», и функция становится функцией в основном классе (точно так же, как функция init - внутри класса потребуется объявление области видимости, например общедоступное, защищенное или частное). Где вы разместите переменную myText, зависит от того, когда вы захотите ее изменить, но сейчас это должно быть сделано:

package 
{
  import flash.display.Sprite;
  import flash.events.Event;
  import flash.external.ExternalInterface;

  /**
   * ...
   * @author Will Thomas
   */
  public class Main extends Sprite 
  {
    public function Main():void 
    {
        if (stage) init();
        else addEventListener(Event.ADDED_TO_STAGE, init);
    }

    private function init(e:Event = null):void 
    {
        removeEventListener(Event.ADDED_TO_STAGE, init);
        // entry point

        ExternalInterface.addCallback("sendOutput", sendStaticTextFromAS3);
    }

    protected function sendStaticTextFromAS3():void {
        var myText:String = "Example String";
        ExternalInterface.call("receiveTextFromAS3", myText);
    }

  }

}

Если я вспомню, как работает ExternalInterface.addCallback, похоже, что это будет делать, когда вы вызываете sendOutput () из javascript, он вызывает метод sendStaticTextFromAS3 в ActionScript, который отправит «Пример строки» обратно в receiveTextFromAS3 ( ) Функция JavaScript - разновидность петли. Вы можете использовать одну функцию для обработки связи javascript-to-as3, в то время как отдельная функция обрабатывает вашу связь as3-to-javascript:

    private function init(e:Event = null):void 
    {
        removeEventListener(Event.ADDED_TO_STAGE, init);
        // entry point

        // Setup js-to-as listener
        ExternalInterface.addCallback("sendTextToAS3", receiveTextFromJS);

        // Send example text to js
        sendTextFromAS3("Hello from ActionScript!");
    }

    protected function receiveTextFromJS(text:String):void {
        trace("Received text from js: "+text);
        // TODO: do something with it
    }

    protected function sendTextFromAS3(text:String):void {
        ExternalInterface.call("receiveTextFromAS3", text);
    }

Также следует отметить, что существуют ограничения безопасности для использования addCallback, описанные в Документация по внешнему интерфейсу (ваш SWF-файл должен быть встроен на веб-страницу с набором параметров allowScriptAccess).

Надеюсь это поможет. знак равно

person Jeff Ward    schedule 30.03.2012