![]() |
|
||||||||||
|
|
|
|||||
|
Регистрация: Oct 2008
Сообщений: 52
|
Как я понимаю в AS3 нет такой полезной штуки как объявление глобальных переменных с помощью _global.
Значит придется в ручную создать переменные с глобальным доступом. Собственно вопрос в этом. Суть: Допустим у меня есть некая переменная которая используется в корневом мувиклипе. Корневой мувиклип содержит в себе мувиклип rooms в котором мувиклип room. Значения моей переменной изменяются в мувиклипе room, а применяется переменная в пределах корневого мувиклипа. Т.е нужно передавать значения переменной из вложенного мувиклипа в корневой. Использование _global решало эту проблему в AS2. Т.е. нужно создать аналог _global. В общем кто что может сказать. Заранее спасибо. |
|
|||||
|
Регистрация: Aug 2009
Адрес: Казахстан Усть-Каменогорск
Сообщений: 249
|
но это только статично
а так можно обрашатся parent.parent.parent только нежелательно это наверное
__________________
Flex+AS3 good) |
|
|||||
|
Modus ponens
|
_global в AS2 нужен был для хранения классов - все остальное, что вы с ним могли делать - это просто по недосмотру / недоразвитости языка.
Если вам нужно чтобы room мог сеттить rooms - то вот и передайте ему ссылку на rooms. Никакие глобальные переменные для этого не нужны.
__________________
Hell is the possibility of sanity |
|
|||||
|
Регистрация: Oct 2008
Сообщений: 52
|
Использование публичных атрибутов возможно только в пределах пакета*
Использование статистических атрибутов возможно только в пределах класса* Что на счет _global -не понятно какие классы он способен содержать или описывать -лично я классы описывал используя метод include. А _global использовал для определения глобальных переменных, значения которых доступны даже не только в пределах мувиклипов основного FLA файла, но и для всех импортируемых мувиклипков, библиотек и всего прочего в основной FLA файл. По сути нужно создать класс, что я делал до этого: Затем подключал класс через import в FLA файле, но все вложенные мувиклипы не видят подключаемые в родительских мувиклипах классы и их атрибуты. |
|
|||||
|
Modus ponens
|
Не правильно, читайте мануал.
Цитата:
Цитата:
Глобальные переменные - это в целом плохая практика, и для описаной вами задачи противопоказаны. Основным недостатком будет пожалуй то, что глобальные переменные ставят любой класс, который их использует в зависимость от внешних факторов, которые в дальнейшем приведут к тому, что этот класс нельзя будет использовать повторно. Кроме того, глобальная область видимости - это потенциальные конфликты имен и конфликты доступа - вы никогда не можете быть уверены в том, что другой участок кода не поменяет чего-то в глобальной области видимости. Как уже говорилось - в AS3 предпочтительно не использовать FLA файлы для кода. Так устроен язык, что скрипт который вы можете поместить на таймлайн во флеше не будет обладать всеми возможностями скрипта в классе. Например, вы не сможете указать тип доступа к методу или свойству, более того, вы даже не сможете создать свойство в полном смысле этого слова - геттеры и сеттеры создать на таймлайне нельзя. Вы не сможете управлять наследованием - оно как бы вообще для вас останется за бортом. Возможно есть и другие недостатки, которые просто сейчас не приходят в голову, но, по-моему этого уже должно быть достаточно, чтобы отказаться от идеи написания кода на таймлайне.
__________________
Hell is the possibility of sanity |
|
|||||
|
Регистрация: Jan 2009
Сообщений: 1,651
|
тебе нужно что-нибудь с функциональным программированием(это такие языки, где есть метки и goto), объектно-ориентированное тебе не подходит.
во fla-файле в as3 никто ничего не пишет. Заходишь в свойства сцены и указываешь класс экземпляром которого будет сцена. Этот класс должен быть наследником Sprite или MovieClip. Фактически, он и является неким аналогом global из as2. Обращаться у публичным статичным свойствам можно из любого пакета/класса. свойства, кстати, принято с маленькой буквы объявлять, чтобы не путать с классами.
__________________
мой пустой блог |
|
|||||
|
Регистрация: Oct 2008
Сообщений: 52
|
>iflamberg
Мой класс приклеплен к Fla файлу. - тут просто переменной curWalls присваивается значение GlobalVar.Wal, а мне нужно не получать значение из класса , а изменять его в мувиклипе room и использовать к корневом мувиклипе. Собственно попробуйте сделать вложенный мувиклип изменить какую нибудь переменную в нем, а затем использовать значение этой переменной в корневом мувиклипе. Увидите что не получается передавать значения переменных между мувиклипами fla файла. |
|
|||||
|
Регистрация: Jan 2009
Сообщений: 1,651
|
Цитата:
И еще раз. Глобальные переменные используются только в крайнем случае. Например: у тебя есть класс player экземпляр класса Footballer - футболист. Если ему надо взаимодействовать с экземпляром класса мяч - ball = new Ball() - то это произходит вот так: player.take(ball) или player = new Footballer (ball), или вообще, через событие: или на крайняк, что-нибудь типа но стараться не использовать глобальные переменные для таких вещей. Глобальными переменными обычно только константы объявляют: public static const PLAYER_STATUS_WAIT_LOBBY:uint = 0; public static const PLAYER_STATUS_PLAY:uint = 1; public static const PLAYER_STATUS_DISCONNECTED:uint = 2; короче говоря, ты вообще не понимаешь принципы ООП-программирования, его парадигму. Сначала нужно разобраться в этом, а потом уже браться за разработку чего-либо.
__________________
мой пустой блог Последний раз редактировалось iflamberg; 20.12.2009 в 17:43. |
|
|||||
|
Регистрация: Oct 2008
Сообщений: 52
|
Спасибо за разъяснения выше.
Разъясню подробно: Я хочу создать квест, имитирующий 3-d движение. Есть 4-е кнопки - поворот влево, поворот вправо, движение вперед, движение назад. В корневом мувиклипе есть вложенный мувиклип rooms, который содержит допустим 4-е кадра с лейбалами room1, room2, room3, room4 - т.е 4- комнаты. Каждая комната состоит квадратов (часть комнаты в которой мы находимся), каждый квадрат состоит из 4-х стен(сторон, по сути изображения которое мы видим на экране в ролике). В rooms есть мувиклип room, он содержит квадраты комнаты и стены квадрата. (Пр. кадры с лейбалами a1,a2,a3,a4 -это есть 4 стены (1,2,3,4 - номера стены), префикс(а) -префикс содержит индекс квадрата. Допустим комната из 4-х квадратов состоит из кадров: a1,a2,a3,a4,b1,b2,b3,b4,c1,c2,c3,c4,d1,d2,d3,d4 По умолчанию мы находимся в 1-ой комнате, 1-ой стены, 1-го квадрата - room1.a1 При нажатии кнопки поворот влево/поворот вправо -идет перемещение на предыдущую /следующую стену квадрата комнаты - собственно я это уже сделал, но не используя вложенные мувиклипы -все кадры(пока у меня была одна комната, состоящая из 1-го квадрата) находились в корневом мувиклипе -и проблем не было с переменными. Так делать нельзя - потому что корневой мувиклип будет в итоге просто завален кучей кадров, слоев и пр. Может быть не понятно -но такая структура позволит в итоге двигаться по комнатам программно ориентируясь по индексам (индекс допустим a1 показывает что мы находимся в первом квадрате комнаты и смотрим в сторону 1 (на Север)). Индексы выполняют роль координат, индексы сохраняются в переменных wall и prefix. Каждый кадр мувиклипа room изменяет значение переменных wall и prefix. Если мы находимся в a1 - то переменная wall содержит значение стены которую мы видим -1, переменная prefix содержит индекс квадрата в котором находимся - a. Ну еще переменная должна быть которая содержит индекс комнаты, но это само собой. Когда мы жмем на кнопки поворота - меняется сторона квадрата в котором мы находимся. Суть такая - мы переходим на другой кадр в мувиклипе room, например был у нас индекс a1 -повернули влево -стал a4 - мы сохраняем наш индекс в переменные: wall = 4; prefix=a; -в кадре под лейбелом a4 мувиклипа room. Потом мы должны передать значения этих переменных в корневой мувиклип - где у нас описан класс Control с методами передвижения по нашим комнатам -метод поворота, метод движения вперед/назад. Мы должны передать координаты (переменные wall,prefix) из мувика rooms/room в корневой мувиклип - методам класса Control -чтобы двигаться по комнатам и частями комнаты(квадратам). Как передать значения параметров wall и prefix из room к нашим методам класса Control??? Как описать переменные чтобы их значения передавались куда угодно в нашем FLA файле подобно _global??? Надеюсь понятно объяснил. Выглядит на первый взгляд сложно, но на самом деле куда сложнее вещи делают на Flash. В идеале мы опишем всего 4-е функции для 4-х кнопок движения -чтобы передвигаться, а как двигаться вычислит уже сам код. Последний раз редактировалось nickorsk; 20.12.2009 в 19:05. |
![]() |
![]() |
Часовой пояс GMT +4, время: 20:05. |
|
|
« Предыдущая тема | Следующая тема » |
| Теги |
| _global |
|
|