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

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

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

Регистрация: Jul 2011
Сообщений: 21
Attention Экземпляр класса сам добавляет себя на таймлайн

Всех приветствую.
Подскажите, пожалуйста, как из конструктора класса обратиться к таймлайну? Спасибо!


Единственный способ, который мне известен - передать конструкторы ссылку на таймлайн в качестве параметра. Но, мне кажется, это - изврат.

Спасибо!

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

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,436
Изврат - это самодобавление.
__________________
Reality.getBounds(this);

Старый 03.07.2011, 00:49
Kolyunya вне форума Посмотреть профиль Отправить личное сообщение для Kolyunya Найти все сообщения от Kolyunya
  № 3  
Ответить с цитированием
Kolyunya

Регистрация: Jul 2011
Сообщений: 21
Что быстрее и короче?
Код AS3:
var newSprite:SpriteClass = new SpriteClass();this.addChild(newSprite);
или

Код AS3:
var newSprite:SpriteClass = new SpriteClass();

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

Регистрация: Jul 2011
Сообщений: 21
Прошу отвечать по теме, как обратиться к таймлайну из класса?
Спасибо!

Старый 03.07.2011, 01:30
S-ed вне форума Посмотреть профиль Отправить личное сообщение для S-ed Найти все сообщения от S-ed
  № 5  
Ответить с цитированием
S-ed
 
Аватар для S-ed

Регистрация: Jul 2001
Адрес: SPb.RU
Сообщений: 148
Отправить сообщение для S-ed с помощью ICQ
К какому таймлайну? =)
У всех наследников мувиклипа есть таймлайн.
Для стейджа:
Код AS3:
trace(root);//вернет самый верхний DisplayObject - обычно - таймлайн стейджа
Увы, согласен с Волшем, не стоит...
__________________
RTFM


Последний раз редактировалось S-ed; 03.07.2011 в 01:39.
Старый 03.07.2011, 01:36
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 6  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,436
Это ActionScript а не хайку. Количество строк не имеет значения. Хотите в одну?
Код AS3:
var newSprite:SpriteClass = this.addChild(new SpriteClass());
По теме – кроме как "передать ссылку на самого себя" – чтож, можно и поизвращаться. Можно хранить эту ссылку на контейнер где-нибудь в статическом свойстве какого-нибудь класса, который будет импортирован в SpriteClass. Больше способов обратиться куда-то из конструктора, хвала создателям, нет. К счастью AS3 ориентирован на ООП и предполагает, что все вопросы решают родители, а не новорожденные дети.
__________________
Reality.getBounds(this);

Старый 03.07.2011, 01:37
КорДум вне форума Посмотреть профиль Отправить личное сообщение для КорДум Найти все сообщения от КорДум
  № 7  
Ответить с цитированием
КорДум
 
Аватар для КорДум

блогер
Регистрация: Jan 2008
Адрес: syktyvkar
Сообщений: 3,803
Записей в блоге: 10
Цитата:
Сообщение от Kolyunya Посмотреть сообщение
Что быстрее и короче?
Код AS3:
var newSprite:SpriteClass = new SpriteClass();this.addChild(newSprite);
или

Код AS3:
var newSprite:SpriteClass = new SpriteClass();
Второе (если подразумевается, что добавление реализовано в конструкторе или где-то еще) называется быдлокодерством. На самом деле не быдло-, кое-что другое, ну вы поняли.
Тем более, зачем вам ссылка на таймлайн? Добавляйте все в экземпляр главного класса и его дисплейных отпрысков. Есть еще stage, в конце концов.
__________________
тут я

Старый 03.07.2011, 02:33
Kolyunya вне форума Посмотреть профиль Отправить личное сообщение для Kolyunya Найти все сообщения от Kolyunya
  № 8  
Ответить с цитированием
Kolyunya

Регистрация: Jul 2011
Сообщений: 21
Спасибо всем ответившим!

Продолжая дискуссию: пишу класс, вычисляющий скорость движения курсора мыши. Каким образом метод моего класса будет получать текущую координату курсора мыши без доступа к объекту stage (читай: не имея ссылки на объект stage)?

trace(stage) = null только если экземпляр этого класса не добавлен на таймлайн. НО! Добавить его туда я не могу, т.к. класс должен работать внутри других классов.

Прикладываю код класса, если кто захочет помочь советом. На данный момент экз. класса получает ссылку на сцену в кач. параметра.
Спасибо!

Код AS3:
package src.tools
{
	import flash.events.*;
	import flash.display.Stage;
 
	/*
	Класс, позволяющий вычислять скорость движения курсора мыши
	и координаты курсора.
	Имеет 2 приватных свойства: ссылка на таймлайн и массив координат мыши
	Имеет 4 метода: возвращающают скорости по горизонтали и вертикали, а также
	координаты курсора в данный момент.
	*/
 
	public class MouseWatcher
	{
		// Свойство получит ссылку на сцену
		private var mStage:Stage;
		// Свойство, содержит координаты курсора в предыдущий момент времени
		// [0] - по горизонтали
		// [1] - по вертикали
		private var mPositionPrev:Array;
 
 
 
		// Конструктор класса
		public function MouseWatcher(mStage:Stage)
		{
			this.mPositionPrev = new Array();
			// Определяем корневой таймлайн
			this.mStage = mStage;
		}
 
 
 
		// Метод возвращает горозонтальную скорость курсора
		// Один аргумент отвечающий за вывод скорости или ее модуля 
		public function mouseSpeedHor(abs:Boolean):Number
		{
			var mousePosHorCurr:Number;//Текущая координата курсора
			var mousePosHorDiff:Number;// Разница между предыдущей и текущей координатой
			mousePosHorCurr = this.mStage.mouseX;// Текущая координата мыши
			mousePosHorDiff = mousePosHorCurr - this.mPositionPrev[0];// Разность координат
			this.mPositionPrev[0] = mousePosHorCurr;// Текущая координата сохраняется как устаревшая
			//Если надо найти модуль скорости ...
			if (abs)
			{
				// ... то мы его вычисляем
				mousePosHorDiff = Math.abs(mousePosHorDiff);
			}
			return mousePosHorDiff;
		}
 
 
 
		// Метод возвращает горозонтальную скорость курсора
		// Один аргумент отвечающий за вывод скорости или ее модуля 
		public function mouseSpeedVert(abs:Boolean):Number
		{
			var mousePosVertCurr:Number;//Текущая координата курсора
			var mousePosVertDiff:Number;// Разница между предыдущей и текущей координатой
			mousePosVertCurr = this.mStage.mouseY;// Текущая координата мыши
			mousePosVertDiff = mousePosVertCurr - this.mPositionPrev[1];// Разность координат
			this.mPositionPrev[1] = mousePosVertCurr;// Текущая координата сохраняется как устаревшая
			if (abs)
			{
				// ... то мы его вычисляем
				mousePosVertDiff = Math.abs(mousePosVertDiff);
			}
			return mousePosVertDiff;
		}
		public function get mPosX():Number
		{
			return this.mStage.mouseX;
		}
		public function get mPosY():Number
		{
			return this.mStage.mouseY;
		}
	}
}


Последний раз редактировалось Kolyunya; 03.07.2011 в 02:42.
Старый 03.07.2011, 02:46
Seagull вне форума Посмотреть профиль Отправить личное сообщение для Seagull Найти все сообщения от Seagull
  № 9  
Ответить с цитированием
Seagull

Регистрация: Jun 2011
Сообщений: 18
Кхм... А Вы не считаете, что правильнее будет передать координаты аргументом в функции вычисляющие скорость? Одним из основных принципов ООП являеются слабое связывание и сильное зацепление. ТО есть класс должен быть максимально независим и выполнять минимум задач. Вот и пусть только считает. Нет?

P.S. Кстати хранить координату куда удобнее хотя бы в том же самом Point-е. У него есть куча удобных функций для работы с ними.
__________________
_____
Почему-то перманентно чувствует себя лезущим куда-то не туда занудой. Тяжёлый случай. >.<


Последний раз редактировалось Seagull; 03.07.2011 в 02:49.
Старый 03.07.2011, 03:28
Kolyunya вне форума Посмотреть профиль Отправить личное сообщение для Kolyunya Найти все сообщения от Kolyunya
  № 10  
Ответить с цитированием
Kolyunya

Регистрация: Jul 2011
Сообщений: 21
Seagull, допустим, я так и сделаю.
Но вопрос СОВСЕМ в другом! Вопрос в том, КАК я эти координаты получу внутри класса???
Класс по расчету скорости ведь - вспомогательный. Его экземпляр нужно вызывать в других классах. А другие классы не знают, где стэйдж и где рут.....


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

Теги
class , root , stage
Опции темы
Опции просмотра

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

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


 


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


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