![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|
|
|||||
|
Регистрация: Mar 2010
Сообщений: 25
|
Вообщем возникла такая проблема. В игре есть несколько разных классов в разных AS файлах.
Допустим у меня в основном классе документа есть переменная score в которой храниться количество очков. А в классе бонусов есть функция которая при столкновении героя с бонусом дает к примеру ему +100 очков. Возникает вопрос - как правильно мне из стороннего класса изменить значиние переменной в основном классе (скажем так глобальной переменной, так как она и в других классах будет меняться и использоваться для алгоритмов). Я понимаю что можно сделать к примеру (root as MovieClip).score+=100, но мне кажется что это не правильное решение с точки зрения AS3. Ведь получается что я к переменной обращаюсь по сути не через классы и объекты, а через root - главную сцену мувика как я понимаю. Подскажите как правильно сделать "глобальные" переменные в основном классе чтобы я мог их менять и использоваться в других классах. |
|
|||||
|
Квач
Регистрация: Sep 2006
Адрес: Украина, Киев
Сообщений: 1,526
|
2 dedalx:
Что-то сделать из экземпляра одного класса в экземпляре другого класса можно разными способами. Свойствами, методами, событиями... Кстати, конструкция вызовет ошибку, поскольку у экземпляров класса MovieClip нет свойства score.
__________________
Да не нужно тебе читать документацию по Flash и AS от Adobe - ты слишком умён для этого |
|
|||||
|
Регистрация: Mar 2010
Сообщений: 25
|
Цитата:
Сформулирую вопрос по другому - как называется объект основного класса документа чтобы я мог обращаться к его методам? Ведь как я понимаю он создается автоматически, какое у него имя? Или это и есть root? А (root as MovieClip).score+=100 у меня прекрасно работает, также как и root.score+=100 если выбрать не "жесткую" компиляцию. Только это не верное решение. Приведу пример: В делфи чтобы использовать функцию из другого класса мы просто подрубали нужный Unit к документу и спокойно юзали функции что есть в нем - к примеру просто GetSomething(3) без всяких адресаций к чему либо. Но если я импортирую основной класс документа в классе бонусов к примеру, я все равно не смогу манипулировать с переменными и функциями класса основного документа напрямую (как это можно в делфи). Как с этим быть во флеше? Последний раз редактировалось dedalx; 14.07.2010 в 18:29. |
|
|||||
|
Регистрация: Mar 2008
Сообщений: 259
|
Не вызовет, потому что мувиклип динамичный класс.
P.S. Тем не менее я считаю, что это некорректно. |
|
|||||
|
Регистрация: Mar 2010
Сообщений: 25
|
Подробнее пожалуйста, с примером под мой вопрос. Какой класс надо делать public static или метод и как откуда использовать?
|
|
|||||
|
Квач
Регистрация: Sep 2006
Адрес: Украина, Киев
Сообщений: 1,526
|
__________________
Да не нужно тебе читать документацию по Flash и AS от Adobe - ты слишком умён для этого |
|
|||||
|
Регистрация: Mar 2010
Сообщений: 25
|
То есть в основном классе документа (engine.as к примеру я пишу):
public static var score:int; в классе bonus я подрубаю сверху основной класс документа: import game.engine; и могу теперь в классе бонус просто образаться к переменной как engine.score? Так ? А это нормально что у меня импортированы классы друг в друга, то есть в основном классе у меня import bonus, а в классе бонуса импорт основного import engine? |
|
|||||
|
блогер
Регистрация: Oct 2005
Адрес: Днепродзержинск - город Брежнева и других логопедов
Сообщений: 1,421
Записей в блоге: 4
|
Да, так, минусов такого обьявления не знаю (ну может компилятору придётся похуже, но замедления компиляции не замечал). Единственное что - доступ к статическим переменным почему-то медленнее, чем к нестатическими и потому конструкция, вроде той, что по ссылке выше (хотя она как по мне стрёмная весьма и я не так делал бы) может иметь смысл, т.к. можно сохранить у себя ссылку на что-то типа того обьекта vars. Но ни разу проблемы с производительностью не решались заменой статиков, так что это скорее для общего развития %)
|
|
|||||
|
Регистрация: Feb 2009
Адрес: Ялта, Севастополь, Одесса
Сообщений: 52
|
Создайте класс содержащий статические переменные (методы, гетеры/сеттеры) и импортируйте его в те классы в которых нужен доступ к глобальному коду
package { public class Global{ public static var str:String = ""; public static var arr:Object; public static registerVar(name:String, value:* = null):void{ if(arr[name] != undefined){ arr[name] = value; } } ............................. } } package { import Global; public class Class1 { public function Class1(){ trace(Global.str); } } }
__________________
понимание основ освобождает от необходимости запоминания тысяч фактов Последний раз редактировалось Elser; 15.07.2010 в 03:42. |
![]() |
![]() |
Часовой пояс GMT +4, время: 22:21. |
|
|
« Предыдущая тема | Следующая тема » |
| Теги |
| AS3 , root , глобальные переменные |
|
|