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

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

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

блогер
Регистрация: Jun 2005
Адрес: Toronto
Сообщений: 6,601
Записей в блоге: 17
Цитата:
Сообщение от dixlofos Посмотреть сообщение
вся беда в том, что объект уже на сцене, и почему я не могу задействовать stage. я не понимаю.
Объясните пажалуйста..
Значит не на сцене. Может, просто куда то вложен, но на сцене он не отображается.

Старый 18.01.2010, 00:55
dimarik вне форума Посмотреть профиль Отправить личное сообщение для dimarik Найти все сообщения от dimarik
  № 12  
Ответить с цитированием
dimarik
.
 
Аватар для dimarik

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
Цитата:
Сообщение от dixlofos Посмотреть сообщение
всем хеллоу!
Есть у меня класс Craft :
<skipped>
а как бы я по клавишам не стучал, то "^_^" некак не хочет написаться
А если дать фокус Craft'у?

Код AS3:
public function Craft():void {
    super();
    ...
    super.stage.focus = this;
}
__________________
Воспитан в TimeZero. Работаю в Mail.ru.

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

Регистрация: Sep 2002
Сообщений: 30,787
Цитата:
Сообщение от dimarik Посмотреть сообщение
хочет написаться
А если дать фокус Craft'у?

Код AS3:
public function Craft():void {
    super();
    ...
    super.stage.focus = this;
}
[/quote]

Ого, Димка, а ты уверен, что у него Craft рутом повешен?

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

Регистрация: Apr 2009
Сообщений: 167
Записей в блоге: 1
Psycho Tiger
даю руку на отсечение, что на сцене! =]
Сам мышкой перетащил из библиотеки, и вкладывать его некуда он единственный мувик в флэшке.

dimarik
Не помогло

etc
а что значит "рутом повешен"?


...
В ходе дальнейших экспериментов, решил попробовать решить проблему через наследование, и нашел вот такую странную закономерность:

Создал fla файл, создал мувиклип Задал ему базовый класс (ну тот что в свойствах мувиклипа так назван, прошу меня не ругать опять за эту, совсем не мою выдумку):
Код AS3:
package classes
{
	import flash.display.MovieClip;
 
	public class R2Class extends MovieClip
	{
		public function R2Class():void
		{
			trace("r2 class called");
		}
	}
}
потом создал опять в другом пакете другой класс, расширяющий класс "R2Class" :
Код AS3:
package classes.assisted
{
	import classes.R2Class;
 
	public class AssistedClass extends R2Class
	{
		public function AssistedClass():void
		{
			trace("assistedClass called");			
		}
	}
}
ну и есть у меня еще и третий класс, который тоже привязан к мувиклипу (ну или мувиклип привязан к нему), который вызывает класс "AssistedClass" :
Код AS3:
package classes
{
	import flash.display.MovieClip;
	import classes.assisted.AssistedClass;
 
	public class R1Class extends MovieClip
	{
		var AC:AssistedClass = new AssistedClass();
 
		public function R1Class():void
		{
			trace("r1class called");				
		}
	}
}
и после компиляции, многоуважаемый компилятор пишет мне, что все пучком
Код:
r2 class called
assistedClass called
r1class called
r2 class called
Но если я в функции конструкторе класса "R2Class" пишу
Код AS3:
trace(stage.stageHeight);
То компилятор выдает мне:
Код:
r2 class called
TypeError: Error #1009: Не удается вызвать свойство или метод со ссылкой на объект "null".
	at classes::R2Class()
	at classes.assisted::AssistedClass()
	at classes::R1Class()
	at r1()
	at flash.display::Sprite/constructChildren()
	at flash.display::Sprite()
	at flash.display::MovieClip()
r2 class called
400
тобишь классы "R1Class" и соответственно "AssistedClass" не вызываються, и это меня порядком бесит >_<.
Почему такая несправедливость в мире ActionScript3.0 ?

Добавлено через 4 минуты
Вобще мне больше всего интересно как делаються профессиональные крупные проекты. Управляют ли там отдельные классы отображаемыми объектами полностью, или вспомогательные классы используються лишь для приема-возврата значений?

Я клоню к тому, что может я вобще порю ужасную ерись и все делаеться совсем не так?

Старый 18.01.2010, 20:58
fljot вне форума Посмотреть профиль Отправить личное сообщение для fljot Найти все сообщения от fljot
  № 15  
Ответить с цитированием
fljot

блогер
Регистрация: Jul 2007
Сообщений: 940
Записей в блоге: 3
Цитата:
Сообщение от dixlofos Посмотреть сообщение
var AC:AssistedClass = new AssistedClass();
...
Но если я в функции конструкторе класса "R2Class" пишу
Код AS3:
trace(stage.stageHeight);
То компилятор выдает мне:
Экземпляр AssistedClass (переменная AC, которая кстати не должна начинаться с заглавной буквы) в момент создание (т.е. вызова конструктора) НЕ НАХОДИТСЯ в дисплей листе, поэтому его свойство stage нулевое. Слушайте Event.ADDED_TO_STAGE

Старый 19.01.2010, 15:57
Psycho Tiger вне форума Посмотреть профиль Отправить личное сообщение для Psycho Tiger Найти все сообщения от Psycho Tiger
  № 16  
Ответить с цитированием
Psycho Tiger
 
Аватар для Psycho Tiger

блогер
Регистрация: Jun 2005
Адрес: Toronto
Сообщений: 6,601
Записей в блоге: 17
Угу, fljot прав. Давай сюда руку)

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

Регистрация: Apr 2009
Сообщений: 167
Записей в блоге: 1
Вот спасибо, друзья =)
Для потомков оставлю запись решения:

Базовый класс мувиклипа:
Код AS3:
package classes
{
	import flash.display.MovieClip;
	import flash.events.*;
 
	import classes.assisted.AssistedClass;			
 
	public class R1Class extends MovieClip
	{
		var AC:AssistedClass = new AssistedClass();
 
		public function R1Class():void
		{
			addChild(AC);
			trace("r1class called");	
		}
	}
}
Вспомогательный класс:

Код AS3:
package classes.assisted
{
	import flash.events.*;
	import flash.display.MovieClip;
 
	public class AssistedClass extends MovieClip
	{
		public function AssistedClass():void
		{
			this.addEventListener(Event.ADDED_TO_STAGE, ats);
			trace("assistedClass called");			
		}
		function ats(e:Event):void
		{
			trace("SS");
			trace(stage.stageHeight);	
		}
	}
}
всё трасируеться, все работает =]

Старый 20.01.2010, 21:43
Psycho Tiger вне форума Посмотреть профиль Отправить личное сообщение для Psycho Tiger Найти все сообщения от Psycho Tiger
  № 18  
Ответить с цитированием
Psycho Tiger
 
Аватар для Psycho Tiger

блогер
Регистрация: Jun 2005
Адрес: Toronto
Сообщений: 6,601
Записей в блоге: 17
Как то не круто. Мы прокачаем ваш класс )
Код:
package classes.assisted
{
	import flash.events.*;
	import flash.display.MovieClip;
 
	public class AssistedClass extends MovieClip
	{
		public function AssistedClass() //тип у конструктора - это круто)
		{
if (stage) ats();
else super.addEventListener(Event.ADDED_TO_STAGE, ats);
			trace("assistedClass called");			
		}
		private function ats(e:Event = null):void
		{
super.removeEventListener(Event.ADDED_TO_STAGE, ats);
			trace("SS");
			trace(stage.stageHeight);	
		}
	}
}

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

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

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


 


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


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