PDA

Просмотр полной версии : Как можно вызвать функцию из другого файла .as?


ndiezel
12.05.2013, 02:18
Всем привет.

Пишу игру и у меня получается ну очень большой файл с кодом. Становится уже довольно трудно в нём находить то, что надо. И ужать его я никак не могу, поскольку выносить функции в другие файлы можно, но тогда ведь придётся подключать функции из этих файлов с помощью addChild или нет?

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

Есть вообще варианты, чтоб просто вынес функцию или функции в отдельный файл и эти файлы потом как-то собирать "в кучу"? Ато уже надоело по тысяче строк кода искать переменную. Даже и с помощью поиска...

expl
12.05.2013, 03:09
1. Создайте файл "functions.as"
2. Положите рядом с вашим as-файлом
3. В вашем as-файле в том месте, где предполагается расположение этих функций напишите

include "functions.as"

ndiezel
12.05.2013, 11:45
1. Создайте файл "functions.as"
2. Положите рядом с вашим as-файлом
3. В вашем as-файле в том месте, где предполагается расположение этих функций напишите

include "functions.as"


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

Ещё какие-то способы есть?
Т.е. чтоб по сути был как один файл as, просто разбитый на несколько? Без присвоения функциям статических свойств.

Psycho Tiger
12.05.2013, 12:38
include – инструкция препроцессора, который просто вставляет содержимое файла а в файл б. Без всяких проверок на синтаксис и семантики. Они происходят позже.

expl
12.05.2013, 13:56
При этом функции должны быть статическими и если оперируют переменными, которых в этом файле нет, перменные должны быть переданы. Или должны быть глобальными.
Да какими угодно. Это тоже самое, что написать текст, что лежит в functions.as прямо в вашем файле.

Ещё какие-то способы есть?
Т.е. чтоб по сути был как один файл as, просто разбитый на несколько? Без присвоения функциям статических свойств.
Вообще as3 - ООП язык, логической единицей кода в нём являеются:
- класс
- интерфейс
- функция уровня пакета
На класс положено заводить один файл с названием идентичным названию класса
На интерфейс положено заводить один файл с названием идентичным названию интерфейса
На функцию уровня пакета положено заводить один файл с названием идентичным названию функции
Однако, в том же файле, что и класс/функция уровня пакета можно определить вспомогательные классы вне конструкции package ... {}. Пользоваться ими сможет только главный класс в файле.
Расположить 2 класса в файле или назвать класс не так как название файла компилятор вам не даст.
Если классы лежат в одном пакете - то они видны друг другу напрямую, если в разных - надо пользоваться директивой import, чтобы прописать пакет, в котором лежит класс.

но тогда ведь придётся подключать функции из этих файлов с помощью addChild или нет?
Во as3, кроме классов созданных вами, есть _нативные_ классы - API флешплеера (Sprite, MovieClip, Math, ...)
addChild - это всего лишь метод экземпляра _нативного_ класса DisplayObjectContainer, от которого наследуется Sprite. И он добавляет экземпляр класса DiplayObject child в экземпляр класса DisplayObjectContainer (в рантайме):
container.AddChild(child)
С чего вы взяли, что им можно подключать код - не понятно.

Директиву include посоветовал, чтобы не нагружать вас этими концепциями - её практически не используют.
А если дальше программировать на as3 собираетесь придётся нагрузиться концепциями по-хлеще классов/экземпляров классов.
А если вы больше не собираетесь притрагиваться к as3, а игра готова на 80% - используйте include, чтобы не тратить время на обучение.

ndiezel
12.05.2013, 19:22
expl, благодарю за столь развёрнутый ответ. Признаться я бы - обломался столько писать кому-то на форуме )

Я, к сожалению затупил, когда писал предыдущий вам ответ. include - это как раз то, что было нужно. Перепутал с import.
Про классы интерфейсы и т.д. я уже с горем пополам разобрался, а вот include - очень не хватало, поскольку файл, в котором прописан основной движок - очень уж разросся...

Ещё раз благодарю.
Это было то, что нужно