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

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

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

Регистрация: Nov 2009
Адрес: СПб
Сообщений: 2,236
По умолчанию Как обратиться с статическому объекту на root'е?

Вопрос элементарный, но ответа я что-то найти внятного не могу.

Допустим, на сцене лежит мувиклип с идентификатором box (уже лежит, его туда изначально положили статически или мы вообще не знаем, откуда он там взялся) и, допустим, нам надо установить его ширину в 200px

Из основного класса все это доступно элементарно как box.width=200;

Из всяких производных классов он недоступен вообще и советы, которые я тут прочитал, сводятся к написанию методов сеттеров/геттеров в основном классе. Причем, все это сводится обычно к тому, что "так принято в ООП-языках".

На самом деле, ООП (как подход) не отрицает наличия некоторых глобальных переменных/объектов, свойства которых доступны во всех классах приложения. Но это лирика.

Вопрос.
Как сделать объекты, уже лежащие на сцене, глобальными для всех?

ЗЫ. getChildByName не работает

Старый 25.11.2009, 21:23
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 2  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Цитата:
Сообщение от mikhailk Посмотреть сообщение
ЗЫ. getChildByName не работает
Не может быть.

Старый 25.11.2009, 21:40
mikhailk вне форума Посмотреть профиль Отправить личное сообщение для mikhailk Найти все сообщения от mikhailk
  № 3  
Ответить с цитированием
mikhailk
 
Аватар для mikhailk

Регистрация: Nov 2009
Адрес: СПб
Сообщений: 2,236
Без проблем

testAS3.fla:
мувиклип с id "box" лежит на сцене - синий прямоугольник шириной примерно 100px
testAS3 указан как базовый класс

При нажатии на прямоугольние по событию CLICK меняем его размер в основном классе (просто чтобы убедиться, что все работает), создаем объект класса main и пробуем достучаться до box оттуда.

testAS3.as
Код AS3:
package {
	import flash.display.*;
	import flash.events.*;
	import engine.main;
 
	public class testAS3 extends MovieClip {
 
		public function testAS3() {
			box.addEventListener(MouseEvent.CLICK, gameStart);						
		}
 
		public function gameStart(e:Event) {
			box.width=300;
			var gameStage:main = new main();
		}
 
	}
}

engine/main.as
Код AS3:
package engine {
	import flash.display.*;
	public class main extends MovieClip {
		public function main() {
			trace(getChildByName("box"));
		}
	}
}
output: null


Последний раз редактировалось mikhailk; 25.11.2009 в 21:43.
Старый 25.11.2009, 21:44
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 4  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Ну правильно, у main нет box.

Старый 25.11.2009, 21:48
mikhailk вне форума Посмотреть профиль Отправить личное сообщение для mikhailk Найти все сообщения от mikhailk
  № 5  
Ответить с цитированием
mikhailk
 
Аватар для mikhailk

Регистрация: Nov 2009
Адрес: СПб
Сообщений: 2,236
конечно нет

вопрос в этом и был
можно ли объявить box глобальным

Старый 25.11.2009, 21:54
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 6  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Этого не нужно делать. Вашему main вообще не должно быть дела до box-а. Если очень надо, вложите box в main.

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

Регистрация: Nov 2009
Адрес: СПб
Сообщений: 2,236
Вы сейчас говорите про динамические объекты.
С ними вообще проблем нет, где захотел, там и породил.

Вопрос был про то, как из любого класса получить доступ к любому уже существующему объекту на сцене.

Старый 25.11.2009, 23:06
SamFR вне форума Посмотреть профиль Отправить личное сообщение для SamFR Посетить домашнюю страницу SamFR Найти все сообщения от SamFR
  № 8  
Ответить с цитированием
SamFR

Регистрация: Mar 2008
Адрес: Ростов-на-Дону
Сообщений: 354
Цитата:
Сообщение от mikhailk Посмотреть сообщение
Вопрос был про то, как из любого класса получить доступ к любому уже существующему объекту на сцене.
DisplayObjectContainer.getChildAt(), DisplayObjectContainer.numChildren.
А зачем вам это?

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

Регистрация: Nov 2009
Адрес: СПб
Сообщений: 2,236
надо ))

а потом я не вижу, зачем они это убрали.
в AS2 с этим же проблем не было.
_root.box и вперед

Старый 26.11.2009, 00:33
SamFR вне форума Посмотреть профиль Отправить личное сообщение для SamFR Посетить домашнюю страницу SamFR Найти все сообщения от SamFR
  № 10  
Ответить с цитированием
SamFR

Регистрация: Mar 2008
Адрес: Ростов-на-Дону
Сообщений: 354
Это просто другой (лучший, на мой взгляд) подход к программированию, и теперь он стал официальным

Создать новую тему Ответ Часовой пояс GMT +4, время: 04:03.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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