Форум 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=163992)

Atarion 12.08.2011 21:24

подскажите пожалуйста толком о "внешних классах и функциях"
 
я программировал на других языках -а вот на AS3 никак не пойму:
как компактно и удобно - взять и создать свою фукнцию, к которой можно обратится отовсюду - но которая бы лежала где то и не мозолила глаза. Вроде какие то внешние классы или как то так
extern package какой то... что ли?!

derhab 12.08.2011 21:34

Код AS3:

package
{
        public function test():void
        {
            //код
        }
}


Wolsh 12.08.2011 21:35

и не забыть сохранить это в test.as ))

Atarion 12.08.2011 21:46

а как потом этот самый тест подключить к главной программе?

КорДум 12.08.2011 21:51

Как обычный класс.

dimarik 12.08.2011 21:51

Код AS3:

test();


derhab 12.08.2011 21:51

если файл test.as лежит в каком-то пакете, то импортировать его предварительно, если в корне проекта, то вызываете просто test()

Heavy 12.08.2011 22:13

Стыдно сказать но именно этот пример с голой функцией не запускается.
Код:

(15): col: 4 Error: Call to a possibly undefined method test.
хотя при вводе сам выводит подсказку доступного метода test.
Единственное что смущает FD сохраняет не test.as, а Test.as. Может ошибка из за этого возникать?

derhab 12.08.2011 22:15

да, файл должен называться именно test.as а не Test.as

Atarion 13.08.2011 00:20

а вот можно изнутри функции управлять объектами в главном монтажном кадре?

i.o. 13.08.2011 00:23

можно, если передать ссылку на "главный монтажный кадр". Но не нужно)

MXPain 13.08.2011 02:05

Цитата:

Сообщение от Atarion (Сообщение 1021100)
а вот можно изнутри функции управлять объектами в главном монтажном кадре?

да можно

Добавлено через 1 минуту
они будут видимы из функции

toFL 13.08.2011 13:46

Советую прочитать книгу Колина Мука по AS3, В рунете есть русский электронный вариант.
P.S. Тсссс...я ничего не говорил )

Atarion 13.08.2011 13:52

что значит в данном контексте передать ссылку?

КорДум 13.08.2011 14:28

Код AS3:

myGlobalFunction(this);


wvxvw 13.08.2011 14:30

Это действительно делать не нужно. По-нормальному - создайте класс наследник Sprite если кадр один, или MovieClip, если кадров больше. Опишите, что нужно делать в этом классе и назначте этот класс классом документа (настройки публикации -> флеш -> настройки -> класс документа). В этом классе вам будут доступны все объекты помещенные на временную шкалу, но реализовать это можно по-разному. Лучший, с моей точки зрения вариант - это отключить "автоматическое объявление объектов добавленных на сцену" т.как это потом создает проблемы в нормальных редакторах (флеш не допишет декларации в класс-документ, а добавит их на этапе компиляции). И, поэтому, лучше их самому объявить, хотя это вроде как дополнительная работа.
Т.е. к примеру, у вас на сцене есть кнопка, которую вы назвали (задали ей instance name) button, в классе документа вы должны будете добавить public var button:SimpleButton;. Флеш, когда будет компелировать сообразит, что это та же кнопка, что лежит на сцене.

Atarion 20.08.2011 17:17

Код AS3:

package  {
 
        public class maingame {
 
                public function f1():void {
                        // constructor code
                }
 
        }
 
}

требует чтобы имя класса совпадало с именем файла. а что если я хочу тут объявить два класса?
также почему то не вызывается функция говоря: ожидается один аргумент. хотя и void указал, и вызывал
maingame()

Добавлено через 5 минут
Код AS3:

myGlobalFunction(this);

а в функции что прописать? какой тип переменной?

derhab 20.08.2011 18:03

не понятно что вы вообще хотите сделать
имя конструктора должно совпадать с именем класса, в конструкторе не указывается тип возвращаемых данных, он ничего никогда не возвращает
при чем тут
Код AS3:

myGlobalFunction(this);

?

Atarion 20.08.2011 18:15

public class maingame {
требует чтобы это совпало С ИМЕНЕМ САМОГО ФАЙЛА as
а что если я захочу в нем объявить несколько разных классов?

Genzo 20.08.2011 18:21

Цитата:

а что если я захочу в нем объявить несколько разных классов?
1 файл - 1 класс

КорДум 20.08.2011 18:24

Цитата:

а что если я захочу в нем объявить несколько разных классов?
То пишите вне пакета и без модификатора доступа, внизу. Этот класс будет виден ТОЛЬКО тому классу, который определен выше в этом же .as-файле. (если я что-то не путаю)

Добавлено через 5 минут
Код AS3:

package {
 
        public class MyClass {
 
                public function MyClass() {
                        (new MyPrivateClass()).foo();
                }
 
        }
}
 
class MyPrivateClass {
 
        public function MyPrivateClass() {
 
        }
 
        public function foo():void {
                trace(1);
        }
}


Atarion 20.08.2011 18:37

требует КОМПИЛЯТОР чтобы ЭТО MyClass; MyPrivateClass совпадало с названием файла as

КорДум 20.08.2011 19:02

Чего? Ну да, файл должен зваться MyClass.as. Вам уже говорили раньше.

in4core 20.08.2011 19:05

Код AS3:

 
package {
 
        public class MyClass {
 
                public function MyClass() {
                        (new MyPrivateClass()).foo();
                }
 
        }
}
internal class MyPrivateClass {
 
        public function MyPrivateClass() {
 
        }
 
        public function foo():void {
                trace(1);
        }
}

Так красивше)

Добавлено через 1 минуту
Оно и звучит как ВНУТРЕННИЙ))

Atarion 20.08.2011 19:18

так элементарнейший пример НЕ РАБОТАЕТ. тот самый первый что в теме предложили. создаю скажем внешний файл

Код AS3:

package  {
 
 
 
                public function f1():void
                {
                        trace("sddf");
                        // constructor code
                }
 
 
 
}

называю - maingame.as
вызываю из основного когда f1();
не видит!

КорДум 20.08.2011 19:20

Вам сказали, что файл должен зваться ТОЧНО ТАК ЖЕ, как и функция. Функция у Вас названа ну никак не maingame.
И да, это не конструктор, это функция.

Atarion 20.08.2011 19:23

вы издиваетесь? а что если 100 функций? делать сто файлов???!!!

Добавлено через 1 минуту
исправил название- сработало. а как - несколько функций то?

КорДум 20.08.2011 19:25

Да. Зачем может понадобиться столько глобальных функций? Посмотрите на класс Math. У него статические методы.

Atarion 20.08.2011 19:29

то есть вы советуете объявлять их прямо в монтажном кадре? а можно их как то аккуратно отделить что ли - чтобы не мешали??!!

КорДум 20.08.2011 19:31

Какие нафиг монтажные кадры? Класс. Классы. Классики. Math - это класс.

Atarion 20.08.2011 19:33

то есть создать класс в этом самом внешнем файле?

КорДум 20.08.2011 19:34

Конечно. Вы же на as3 пишете, а не as1. Класс с именем Utils, в нем статические методы. И делайте хоть 100 хоть 1000 методов.

Atarion 20.08.2011 22:26

просьба - не могли бы подсказать синтаксис? в с++ все элементарно а тут что то не выходит(

i.o. 20.08.2011 22:29

Цитата:

просьба - не могли бы подсказать синтаксис?
Теперь "издиваетесь" Вы.
in4core Вам все прекрасно показал. В двух вариантах сразу (браво).

Atarion 20.08.2011 22:32

а как тогда к этому обратится в самом коде? класс то объявить надо?

i.o. 20.08.2011 22:34

Цитата:

а как тогда к этому обратится в самом коде? класс то объявить надо?
Что, простите?

Atarion 20.08.2011 22:44

вот я создал класс во внешнем файле. а в нем - метод
Код AS3:

public class MyPrivateClass {
 
        public function MyPrivateClass() {
 
        }
 
        public function foo():void {
                trace(1);
        }
}

как теперь это вызвать из главного кода?
foo(); - не работает

i.o. 20.08.2011 22:45

static допишите
Код AS3:

public static function foo()

А вызывайте как
Код AS3:

MyPrivateClass.foo();

Ну или сделайте через экземпляр, как предложил КорДум постом ниже.

КорДум 20.08.2011 22:46

Код AS3:

var myObj:MyPrivateClass = new MyPrivateClass();
myObj.foo()

А если статик, то MyPrivateClass.foo()

Atarion 20.08.2011 23:35

спасибо. попробую! и последний вопрос остался. чтобы передать в метод класса - ссылку на главный - кадр - как предлагали Myobj.foo(this) то каков должен быть синтаксис в объявлении чтобы приняло эту ссылку верно?


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

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