Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Исполняемый код (http://www.flasher.ru/forum/showthread.php?t=184888)

Nonexistent 29.09.2012 08:57

Исполняемый код
 
Всем привет. Вопрос наверное нубский, т.к. ActionScript изучаю совсем недавно. Проблема в следующем:
кусок кода:
Код AS3:

public class Main {
 
public function Main() {
if (ExternalInterface.available) {
                try {
                    trace("Adding callback...\n");
                    ExternalInterface.call("alert", "Flash added");                       
                    ExternalInterface.addCallback("sendToActionScript", receivedFromJavaScript);
                                        request.method = URLRequestMethod.POST;
                } catch (error:SecurityError) {
                    trace("A SecurityError occurred: " + error.message + "\n");
                } catch (error:Error) {
                    trace("An Error occurred: " + error.message + "\n");
                }
                                } else {
                request.url="index.php?act=error&p=1";
                                navigateToURL(request);
            }
        }

Код скопирован с официального сайта Adobe, затем немного модифицирован. Изначально не работал ExternalInterface. Методом тыка выяснилось, что не выполняется функция Main. Как я думаю (поправьте, если не прав),
Код AS3:

public function Main()

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

ExternalInterface.call("alert", "Flash added");

перед
Код AS3:

public function Main() {

, то в браузере вылазит алерт. Но если делаю так, как написал вначале, то ничего не происходит. Даже пробовал обратиться к функции через класс так: (функция Main была переименована в add)
Код AS3:

var m:Main= new Main(); 
m.add();

, но вылазила ошибка
Цитата:

Error: Access of undefined property m.
. Как сделать, чтобы все работало?

Wolsh 29.09.2012 09:17

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

Nonexistent 29.09.2012 09:23

Спасибо) сразу об этом не подумал. Добавил к классу
Код AS3:

extends Sprite

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

caseyryan 29.09.2012 10:25

Nonexistent, в ас3 не так как в некоторых других языках, функция Main не является обязательной точкой входа. Т.е. как сказал Wolsh класс и его конструктор можно назвать как угодно (естественно соблюдая правила именования).
Если компиляция происходит в Adobe Flash CS.. то для того, чтобы сделать класс главным (документ классом), нужно в ее поле Document Class вписать его название. Если он лежит не в той же папке, что и файл fla, то еще и название пакета.
Допустим в папке лежит файл test.fla и еще одна папка (somepackage) в которой лежит класс MyClass.
Во флешке вписываем в поле документ класс somepackage.MyClass
При этом сам класс MyClass должен выглядеть как минимум так:
Код AS3:

package somepackage {
      public class MyClass extends Sprite { // ну или MovieClip
            public function MyClass() {
                  trace("вот здесь уже будет все работать");
            }
      }
}

т.е. в данном случае документ классом будет MyClass и точкой входа будет метод MyClass()

illuzor 29.09.2012 14:48

Цитата:

для чего нужен Sprite?
Правила такие. Главный класс обязательно должен расширять Sprite или его наследника, например MovieClip


Часовой пояс GMT +4, время: 13:23.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.