![]() |
Как сделать глобальные переменные между классами в AS3?
Вообщем возникла такая проблема. В игре есть несколько разных классов в разных AS файлах.
Допустим у меня в основном классе документа есть переменная score в которой храниться количество очков. А в классе бонусов есть функция которая при столкновении героя с бонусом дает к примеру ему +100 очков. Возникает вопрос - как правильно мне из стороннего класса изменить значиние переменной в основном классе (скажем так глобальной переменной, так как она и в других классах будет меняться и использоваться для алгоритмов). Я понимаю что можно сделать к примеру (root as MovieClip).score+=100, но мне кажется что это не правильное решение с точки зрения AS3. Ведь получается что я к переменной обращаюсь по сути не через классы и объекты, а через root - главную сцену мувика как я понимаю. Подскажите как правильно сделать "глобальные" переменные в основном классе чтобы я мог их менять и использоваться в других классах. |
2 dedalx:
Что-то сделать из экземпляра одного класса в экземпляре другого класса можно разными способами. Свойствами, методами, событиями... Кстати, конструкция Код AS3:
|
Не вызовет, потому что мувиклип динамичный класс.
P.S. Тем не менее я считаю, что это некорректно. |
Цитата:
Сформулирую вопрос по другому - как называется объект основного класса документа чтобы я мог обращаться к его методам? Ведь как я понимаю он создается автоматически, какое у него имя? Или это и есть root? А (root as MovieClip).score+=100 у меня прекрасно работает, также как и root.score+=100 если выбрать не "жесткую" компиляцию. Только это не верное решение. Приведу пример: В делфи чтобы использовать функцию из другого класса мы просто подрубали нужный Unit к документу и спокойно юзали функции что есть в нем - к примеру просто GetSomething(3) без всяких адресаций к чему либо. Но если я импортирую основной класс документа в классе бонусов к примеру, я все равно не смогу манипулировать с переменными и функциями класса основного документа напрямую (как это можно в делфи). Как с этим быть во флеше? |
public static
|
Подробнее пожалуйста, с примером под мой вопрос. Какой класс надо делать public static или метод и как откуда использовать?
|
|
То есть в основном классе документа (engine.as к примеру я пишу):
public static var score:int; в классе bonus я подрубаю сверху основной класс документа: import game.engine; и могу теперь в классе бонус просто образаться к переменной как engine.score? Так ? А это нормально что у меня импортированы классы друг в друга, то есть в основном классе у меня import bonus, а в классе бонуса импорт основного import engine? |
Да, так, минусов такого обьявления не знаю (ну может компилятору придётся похуже, но замедления компиляции не замечал). Единственное что - доступ к статическим переменным почему-то медленнее, чем к нестатическими и потому конструкция, вроде той, что по ссылке выше (хотя она как по мне стрёмная весьма и я не так делал бы) может иметь смысл, т.к. можно сохранить у себя ссылку на что-то типа того обьекта vars. Но ни разу проблемы с производительностью не решались заменой статиков, так что это скорее для общего развития %)
|
Создайте класс содержащий статические переменные (методы, гетеры/сеттеры) и импортируйте его в те классы в которых нужен доступ к глобальному коду
Код AS3:
Код AS3:
Код AS3:
|
| Часовой пояс GMT +4, время: 19:39. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.