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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 20.09.2012, 16:59
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 11  
Ответить с цитированием
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
Цитата:
Сообщение от Isfet Посмотреть сообщение
ну суть в том, как обращаться к this.parent.perent.perent.parent as Main например, как доставать этот класc? Не хочется во всех детей передавать его.
Хранить статический метод, который вытаскивает ссылку на Main класс? Стоит ли Stage присваивать класс Main?
Как в таком случае оращаться к Main из детей(можно обращаться this.root as Main но не знаю правильно ли это)? Как я понял что когда Document class ставишь Main он становится статичным, и как тогда к нему обращаться из детей?
root и есть ссылка на экземпляр документ класса флешки, так и обращаться
нет в AS статичных классов, как нет никаких хитрых чудес при определении документ класса (по сути он всегда есть, только когда он явно не определен IDE\компилятор генерят его сами)

Цитата:
Сообщение от fish_r Посмотреть сообщение
да, а я то иначе считал (http://www.flasher.ru/forum/showthre...=173074&page=3)
в лом перечитывать все, но в той ветке немного о другом вроде бы
вот смотри
Код AS3:
package
{
	import flash.display.DisplayObject;
	import flash.display.Sprite;
 
	public class Main extends Sprite
	{
		public var timeScale:TimeScale;
 
		public function Main():void
		{
			timeScale = new TimeScale(this);
		}
 
		public function tracer():void
		{
			trace( "Main.tracer" );
 
		}
	}
}
import flash.display.Sprite;
 
class TimeScale extends Sprite
{
 
	public function TimeScale(main:Main)
	{
		// на этот момент main.timeScale еще не определена
		// все происходит  до присваивания timeScale ссылки на экземпляр
		trace( "main.timeScale : " + main.timeScale );// main.timeScale : null
		// но сам-то main в порядке
		trace( "main : " + main );// main : [object Main]
		// и методы его тоже
		main.tracer();// Main.tracer
 
	}
}

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

Регистрация: Mar 2012
Адрес: г.Новосибирск
Сообщений: 381
Цитата:
Сообщение от silin Посмотреть сообщение
нет в AS статичных классов, как нет никаких хитрых чудес при определении документ класса
Тогда почему когда я класс документа делаю Main у меня дети не видят публичные функции Main (точнее видят ,но не вызывают), видят только статичные.? Пример в 5 посте.

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

блогер
Регистрация: Jan 2011
Сообщений: 1,162
Записей в блоге: 4
Цитата:
Сообщение от silin Посмотреть сообщение
в лом перечитывать все, но в той ветке немного о другом вроде бы
вот смотри...
ага, я понял, что тогда сделал неправильные выводы.

Добавлено через 6 минут
Цитата:
Сообщение от Isfet Посмотреть сообщение
Тогда почему когда я класс документа делаю Main у меня дети не видят публичные функции Main (точнее видят ,но не вызывают), видят только статичные.? Пример в 5 посте.
Посмотрите внимательно на код. Вы создаете не экземпляр Ojb1, а просто новый спрайт, который никак не связан с obj2, значит Ojb2 у вас вообще не инициализируется и вызов метода из майн не происходит.

Код AS3:
 
package classes.timeScale {
		import classes.Main;
	public class TimeScale extends TimeScaleDragger {
 
		public function TimeScale() {
 
		      var obj1:Sprite = new Sprite();
                                this.addChild(obj1);
		}
	}
}
Добавлено через 21 минуту
а здесь в Main лишняя закрывающая скобка, вначале. Этот пример вообще должен выбрасывать ошибку.

Старый 21.09.2012, 10:15
Isfet вне форума Посмотреть профиль Отправить личное сообщение для Isfet Найти все сообщения от Isfet
  № 14  
Ответить с цитированием
Isfet

Регистрация: Mar 2012
Адрес: г.Новосибирск
Сообщений: 381
5 пост писал в качестве примера "на коленке", ошибся немного , извиняюсь, исправил, суть в том что document class = Main, он добавляет в себя obj1, а obj1 добавляет в себя obj2, а затем я из obj2 обращаюсь к Main через root и у меня не вызываются публичные методы Main, ошибка, как будто они приватные.

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

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
пример, использующий недоступные классы, нельзя запустить и увидеть в чем трабл

вот попытка реконструировать твою структуру, но она почему-то работает
попробуй поломать, чтоб перестала, может тогда разберемся
Код AS3:
package classes
{
	import classes.timeScale.TimeScale;
	import flash.display.Sprite;
 
	public class Main extends Sprite
	{
		public function Main()
		{
			drawTimeScale();
		}
 
		private function drawTimeScale():void
		{
			var timeScale:TimeScale = new TimeScale();
			addChild(timeScale);
		}
 
		public function getVarFromDateScale():void
		{
			trace( "Main.getVarFromDateScale" );
 
		}
	}
}
Код AS3:
package classes.timeScale
{
	import flash.display.Sprite;
 
	public class TimeScale extends Sprite
	{
		public function TimeScale()
		{
			var obj1:Obj1 = new Obj1();
			this.addChild(obj1);
		}
	}
}
Код AS3:
package classes.timeScale
{
	import flash.display.Sprite;
 
	public class Obj1 extends Sprite
	{
		public function Obj1()
		{
			var obj2:Obj2 = new Obj2();
			this.addChild(obj2);
		}
	}
}
Код AS3:
package classes.timeScale
{
	import classes.Main;
	import flash.display.Sprite;
	import flash.events.MouseEvent;
 
	public class Obj2 extends Sprite
	{
		public function Obj2()
		{
			this.addEventListener(MouseEvent.CLICK, onMClick);
			this.graphics.beginFill(0xFF0000);
			this.graphics.drawRect(0, 0, 60, 60);
		}
 
		public function onMClick(e:MouseEvent):void
		{
 
			(this.root as Main).getVarFromDateScale(); // Main.getVarFromDateScale
		}
	}
}

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

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

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

блогер
Регистрация: Jan 2011
Сообщений: 1,162
Записей в блоге: 4
а вы пакет указываете в строке для документ-класса? Это обязательно иначе ИДЕ документ-класс не найдет и создаст свой.

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

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

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

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

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


 


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


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