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

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

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

Регистрация: Mar 2012
Адрес: г.Новосибирск
Сообщений: 381
По умолчанию После присвоения Stage класса Main не видно публичных методов Main

Хотел вообще знать как правильно обходиться со stage, покопавшись в нескольких исходниках понял что ей надо в свойствах присваивать класс, но после присвоения у меня в классе Main перестали видиться публичные методы, неужели такая манипуляция (в свойствах stage присваивать класс) делает этот класс статичным?
Если да, то как вызывать методы класса Main? делать их статичными и обращаться через класс?

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

Регистрация: Oct 2010
Сообщений: 1,049
Отправить сообщение для bav с помощью ICQ
Покажите каким образом вы присвоили stage класс Main (через Document class?). И где теперь не видно публичных методов Main?

Старый 19.09.2012, 20:18
Isfet вне форума Посмотреть профиль Отправить личное сообщение для Isfet Найти все сообщения от Isfet
  № 3  
Ответить с цитированием
Isfet

Регистрация: Mar 2012
Адрес: г.Новосибирск
Сообщений: 381
вот таким макаром в свойтвах stage прописываем класс
Нажмите на изображение для увеличения
Название: sav.jpg
Просмотров: 53
Размер:	62.5 Кб
ID:	28473
потом допустим
Код AS3:
package  classes{
			import classes.timeScale.TimeScale;
 
}
	public class Main extends Sprite {
		public function Main() {
			drawTimeScale();
		}
		private function drawTimeScale ():void {
			var timeScale:TimeScale= new TimeScale(this);
		}
		public function tracer ():void {
			trace("функция класса Main");
		}
	}
}
Код AS3:
package classes.timeScale {
		import classes.Main;
	public class TimeScale extends TimeScaleDragger {
 
		public function TimeScale(main:Main) {
			main.addChild(this);
			main.tracer(); //тут ничего не выводит
		}
	}
}

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

Регистрация: Oct 2010
Адрес: Харьков
Сообщений: 616
Записей в блоге: 1
Отправить сообщение для strangedk с помощью ICQ Отправить сообщение для strangedk с помощью Skype™
Вот всё в точности до наоборот - будет работать

Главный класс на то и главный, что он должен всё решать и всем руководить.

Что вам мешает сделать так:
Код AS3:
package classes {
 
	public class Main extends Sprite {
		public function Main() {
			drawTimeScale();
		}
		private function drawTimeScale ():void {
			var timeScale:TimeScale= new TimeScale();
			addChild(timeScale);
 
			tracer();
		}
		public function tracer ():void {
			trace("функция класса Main");
		}
	}
}
Добавлено через 1 минуту
Речь о том, что это одно и то же по факту

Код AS3:
addChild(timeScale);
в классе Main, и
Код AS3:
main.addChild(this);
в классе TimeScale

Только это ОЧЕНЬ плохая практика, когда объект сам себя добавляет куда-то
__________________
adobe AS3 manual

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

Регистрация: Mar 2012
Адрес: г.Новосибирск
Сообщений: 381
Код AS3:
package  classes{
	import classes.timeScale.TimeScale;
             import classes.dateScale.DateScale;
 
	public class Main extends Sprite {
         private var dateScale:DateScale;
		public function Main() {
			drawTimeScale();
                                       drawDateScale();
		}
		private function drawTimeScale ():void {
			var timeScale:TimeScale= new TimeScale();
                                       addChild(timeScale);
		}
                        private function drawDateScale ():void {
			this.dateScale = new DateScale();
                                       addChild(dateScale);
		}
		public function getVarFromDateScale ():void {
			this.dateScale.getValue();
		}
	}
}
Код AS3:
package classes.timeScale {
		import classes.Main;
	public class TimeScale extends TimeScaleDragger {
 
		public function TimeScale() {
 
		      var obj1:Obj1 = new Obj1();
                                this.addChild(obj1);
		}
	}
}
Код AS3:
package classes.timeScale {
	public class Obj1 extends Sprite {
 
		public function Obj1() {
 
		      var obj2:Obj2 = new Obj2();
			 this.addChild(obj2);
		}
	}
}
Код AS3:
package classes.timeScale {
	public class Obj2 extends Sprite {
 
		public function Obj2() {
			this.addEventListener(MouseEvent.CLICK,onMClick);
		}
		public function onMClick(e:MouseEvent) {
 
			(this.root as Main).getVarFromDateScale();//здесь не видно функции getVarFromDateScale()
		}
	}
}
//то есть изначально все делалось для того чтобы я из класса в глубине мог обратиться сразу к Main(чтобы root указывал на Main, а не на Stage), мне нужно из класса, который лежит в Main вытащить какое-либо значение. Как такое осуществляется? Читал где то что нужно ссылку на Main передавать напрямую в конструкторы, и не обращатся через root. Пдскажите как по правильному?


Последний раз редактировалось Isfet; 21.09.2012 в 10:05.
Старый 20.09.2012, 07:36
fish_r вне форума Посмотреть профиль Отправить личное сообщение для fish_r Посетить домашнюю страницу fish_r Найти все сообщения от fish_r
  № 6  
Ответить с цитированием
fish_r
 
Аватар для fish_r

блогер
Регистрация: Jan 2011
Сообщений: 1,162
Записей в блоге: 4
В первом приведенном вами примере вы обращаетесь к Майн до конца инициализации, а он в это время ещё равен null, то есть его фактически не существует. Инициализация объекта заканчивается тогда когда выполнится конструктор,и методы указанные в конструкторе ( а если в нем указана инициализация нижележащих объектов то и их конструкторы и методы указанные в них ). После этого можно обратиться уже к Майн, как к объекту.

По поводу второго примера strangedk вам уже подсказал, что обращаться из дочерних классов в родительские не корректно. Это создает проблемы при импорте в другие проекты и при отладке.
Чаще всего это решается диспатчем события из дочернего объекта о том, что его сост. изменилось. Родительский объект получает это событие и решает что в связи с этим он должен делать как и чье состояние он должен изменить и т.д.

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

Регистрация: Mar 2012
Адрес: г.Новосибирск
Сообщений: 381
а можете поправить мой код,чтобы было понятно, как нужно диспатчить клик Child-а, и как потом вызывать функцию Main класса?

Старый 20.09.2012, 09:48
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 8  
Ответить с цитированием
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
Цитата:
Сообщение от fish_r Посмотреть сообщение
В первом приведенном вами примере вы обращаетесь к Майн до конца инициализации, а он в это время ещё равен null, то есть его фактически не существует. Инициализация объекта заканчивается тогда когда выполнится конструктор,и методы указанные в конструкторе ( а если в нем указана инициализация нижележащих объектов то и их конструкторы и методы указанные в них ). После этого можно обратиться уже к Майн, как к объекту.
однако небольшой эксперимент показывает, что это не так
Код AS3:
package
{
	import flash.display.Sprite;
 
	public class Main extends Sprite
	{
 
		public function Main():void
		{
			var timeScale:TimeScale = new TimeScale(this);
		}
 
		public function tracer():void
		{
			trace( "Main.tracer" );
 
		}
	}
 
}
import flash.display.Sprite;
 
class TimeScale extends Sprite
{
 
	public function TimeScale(main:Main)
	{
		graphics.beginFill(0xC0C0C0);
		graphics.drawRect(0, 0, 50, 50);
		main.addChild(this);
		main.tracer(); //Main.tracer
 
	}
}
в чем проблема у ТС не очень понятно
(ну не считая того, что так конечно не стоит делать)

Старый 20.09.2012, 12:31
Isfet вне форума Посмотреть профиль Отправить личное сообщение для Isfet Найти все сообщения от Isfet
  № 9  
Ответить с цитированием
Isfet

Регистрация: Mar 2012
Адрес: г.Новосибирск
Сообщений: 381
Цитата:
Сообщение от silin Посмотреть сообщение
в чем проблема у ТС не очень понятно
(ну не считая того, что так конечно не стоит делать)
ну суть в том, как обращаться к this.parent.perent.perent.parent as Main например, как доставать этот класc? Не хочется во всех детей передавать его.
Хранить статический метод, который вытаскивает ссылку на Main класс? Стоит ли Stage присваивать класс Main?
Как в таком случае оращаться к Main из детей(можно обращаться this.root as Main но не знаю правильно ли это)? Как я понял что когда Document class ставишь Main он становится статичным, и как тогда к нему обращаться из детей?

Старый 20.09.2012, 13:25
fish_r вне форума Посмотреть профиль Отправить личное сообщение для fish_r Посетить домашнюю страницу fish_r Найти все сообщения от fish_r
  № 10  
Ответить с цитированием
fish_r
 
Аватар для fish_r

блогер
Регистрация: Jan 2011
Сообщений: 1,162
Записей в блоге: 4
Цитата:
Сообщение от silin Посмотреть сообщение
однако небольшой эксперимент показывает, что это не так
да, а я то иначе считал (http://www.flasher.ru/forum/showthre...=173074&page=3)

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

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

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


 


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


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