Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 20.12.2009, 14:26
nickorsk вне форума Посмотреть профиль Отправить личное сообщение для nickorsk Найти все сообщения от nickorsk
  № 1  
Ответить с цитированием
nickorsk

Регистрация: Oct 2008
Сообщений: 52
По умолчанию _global не используется...

Как я понимаю в AS3 нет такой полезной штуки как объявление глобальных переменных с помощью _global.
Значит придется в ручную создать переменные с глобальным доступом.
Собственно вопрос в этом.

Суть:
Допустим у меня есть некая переменная которая используется в корневом мувиклипе.
Корневой мувиклип содержит в себе мувиклип rooms в котором мувиклип room.
Значения моей переменной изменяются в мувиклипе room, а применяется переменная в пределах корневого мувиклипа. Т.е нужно передавать значения переменной из вложенного мувиклипа в корневой. Использование _global решало эту проблему в AS2.

Т.е. нужно создать аналог _global. В общем кто что может сказать. Заранее спасибо.

Старый 20.12.2009, 14:56
lighto вне форума Посмотреть профиль Отправить личное сообщение для lighto Найти все сообщения от lighto
  № 2  
Ответить с цитированием
lighto
 
Аватар для lighto

Регистрация: Aug 2009
Адрес: Казахстан Усть-Каменогорск
Сообщений: 249
Код AS3:
public static peremenaia:string;
но это только статично
а так можно обрашатся parent.parent.parent только нежелательно это наверное
__________________
Flex+AS3 good)

Старый 20.12.2009, 15:20
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 3  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
Используйте статик переменную классов.
__________________
(и)Нильс.ru | Плагины для FlashDevelop

Старый 20.12.2009, 15:21
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 4  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
_global в AS2 нужен был для хранения классов - все остальное, что вы с ним могли делать - это просто по недосмотру / недоразвитости языка.
Если вам нужно чтобы room мог сеттить rooms - то вот и передайте ему ссылку на rooms. Никакие глобальные переменные для этого не нужны.
__________________
Hell is the possibility of sanity

Старый 20.12.2009, 15:54
nickorsk вне форума Посмотреть профиль Отправить личное сообщение для nickorsk Найти все сообщения от nickorsk
  № 5  
Ответить с цитированием
nickorsk

Регистрация: Oct 2008
Сообщений: 52
Использование публичных атрибутов возможно только в пределах пакета*
Использование статистических атрибутов возможно только в пределах класса*


Что на счет _global -не понятно какие классы он способен содержать или описывать -лично я классы описывал используя метод include.
А _global использовал для определения глобальных переменных, значения которых доступны даже не только в пределах мувиклипов основного FLA файла, но и для всех импортируемых мувиклипков, библиотек и всего прочего в основной FLA файл.
Код AS3:
_global.переменная

По сути нужно создать класс, что я делал до этого:
Код AS3:
package com.gameclass.adjustment
{
 
public class GlobalVar {
 
public static var myTotal:int;
public static var myArray:Array = new Array();
 
public static var Wall:String = new String();
public static var Prefix:String = new String();
 
 
}
}
Затем подключал класс через import в FLA файле, но все вложенные мувиклипы не видят подключаемые в родительских мувиклипах классы и их атрибуты.

Старый 20.12.2009, 18:39
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 6  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Цитата:
Сообщение от nickorsk Посмотреть сообщение
Использование публичных атрибутов возможно только в пределах пакета*
Не правильно, читайте мануал.

Цитата:
Сообщение от nickorsk Посмотреть сообщение
Использование статистических атрибутов возможно только в пределах класса*
Не правильно, читайте мануал.

Цитата:
Сообщение от nickorsk Посмотреть сообщение
Что на счет _global -не понятно какие классы он способен содержать или описывать -лично я классы описывал используя метод include.
А _global использовал для определения глобальных переменных, значения которых доступны даже не только в пределах мувиклипов основного FLA файла, но и для всех импортируемых мувиклипков, библиотек и всего прочего в основной FLA файл.
Класс созданый с помощю ключевого словал class в AS2 записывается в _global. #include (AS2) и include (AS3) - это директива компилятору для вставки произвольного кода из другого файла. Непосредственного отношения к классам не имеет. Внутренняя реализация классов в AS1 / AS2 это #initclip - #endinitclip. Т.е. код помещенный между этими директивами ассоциируется с символом типа MovieClip и фактически является телом класса прилинкованого к этому клипу.

Глобальные переменные - это в целом плохая практика, и для описаной вами задачи противопоказаны. Основным недостатком будет пожалуй то, что глобальные переменные ставят любой класс, который их использует в зависимость от внешних факторов, которые в дальнейшем приведут к тому, что этот класс нельзя будет использовать повторно. Кроме того, глобальная область видимости - это потенциальные конфликты имен и конфликты доступа - вы никогда не можете быть уверены в том, что другой участок кода не поменяет чего-то в глобальной области видимости.

Как уже говорилось - в AS3 предпочтительно не использовать FLA файлы для кода. Так устроен язык, что скрипт который вы можете поместить на таймлайн во флеше не будет обладать всеми возможностями скрипта в классе. Например, вы не сможете указать тип доступа к методу или свойству, более того, вы даже не сможете создать свойство в полном смысле этого слова - геттеры и сеттеры создать на таймлайне нельзя. Вы не сможете управлять наследованием - оно как бы вообще для вас останется за бортом. Возможно есть и другие недостатки, которые просто сейчас не приходят в голову, но, по-моему этого уже должно быть достаточно, чтобы отказаться от идеи написания кода на таймлайне.
__________________
Hell is the possibility of sanity

Старый 20.12.2009, 16:26
iflamberg вне форума Посмотреть профиль Отправить личное сообщение для iflamberg Найти все сообщения от iflamberg
  № 7  
Ответить с цитированием
iflamberg
 
Аватар для iflamberg

Регистрация: Jan 2009
Сообщений: 1,651
тебе нужно что-нибудь с функциональным программированием(это такие языки, где есть метки и goto), объектно-ориентированное тебе не подходит.

во fla-файле в as3 никто ничего не пишет. Заходишь в свойства сцены и указываешь класс экземпляром которого будет сцена. Этот класс должен быть наследником Sprite или MovieClip. Фактически, он и является неким аналогом global из as2.
Обращаться у публичным статичным свойствам можно из любого пакета/класса.
Код:
import engine.GlobalVar;

...

    var curWalls:String = GlobalVar.Wall; // как видишь, сдесь обращение именно к классу, а не к экземпляру класса
свойства, кстати, принято с маленькой буквы объявлять, чтобы не путать с классами.
__________________
мой пустой блог

Старый 20.12.2009, 17:15
nickorsk вне форума Посмотреть профиль Отправить личное сообщение для nickorsk Найти все сообщения от nickorsk
  № 8  
Ответить с цитированием
nickorsk

Регистрация: Oct 2008
Сообщений: 52
>iflamberg

Мой класс приклеплен к Fla файлу.
Код AS3:
var curWalls:String = GlobalVar.Wall;
- тут просто переменной curWalls присваивается значение GlobalVar.Wal, а мне нужно не получать значение из класса , а изменять его в мувиклипе room и использовать к корневом мувиклипе.

Собственно попробуйте сделать вложенный мувиклип изменить какую нибудь переменную в нем, а затем использовать значение этой переменной в корневом мувиклипе. Увидите что не получается передавать значения переменных между мувиклипами fla файла.

Старый 20.12.2009, 17:41
iflamberg вне форума Посмотреть профиль Отправить личное сообщение для iflamberg Найти все сообщения от iflamberg
  № 9  
Ответить с цитированием
iflamberg
 
Аватар для iflamberg

Регистрация: Jan 2009
Сообщений: 1,651
Цитата:
Собственно попробуйте сделать вложенный мувиклип изменить какую нибудь переменную в нем, а затем использовать значение этой переменной в корневом мувиклипе. Увидите что не получается передавать значения переменных между мувиклипами fla файла.
я делаю флеш-игрушки. и вообще много чего на флеше. уже лет пять. и описанные тобой операции делаю по сто раз на дню. и все работает. неправильный у тебя код. И несколько непонятно, что тебе надо.
И еще раз. Глобальные переменные используются только в крайнем случае. Например: у тебя есть класс player экземпляр класса Footballer - футболист. Если ему надо взаимодействовать с экземпляром класса мяч - ball = new Ball() - то это произходит вот так: player.take(ball) или player = new Footballer (ball), или вообще, через событие:
Код AS3:
protected function takeBall (event:FootballEvent):void {
 this.ball = event.ball;
}
или на крайняк, что-нибудь типа
Код AS3:
protected function takeBall ():void {
    this.ball=FootaballGround(this.parent).ball;
}
но стараться не использовать глобальные переменные для таких вещей. Глобальными переменными обычно только константы объявляют:
Код AS3:
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.
Старый 20.12.2009, 18:56
nickorsk вне форума Посмотреть профиль Отправить личное сообщение для nickorsk Найти все сообщения от nickorsk
  № 10  
Ответить с цитированием
nickorsk

Регистрация: 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

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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