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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 28.08.2009, 22:30
DaberMaN вне форума Посмотреть профиль Отправить личное сообщение для DaberMaN Найти все сообщения от DaberMaN
  № 1  
Ответить с цитированием
DaberMaN
[+4 20.02.09]

Регистрация: Feb 2009
Сообщений: 19
По умолчанию Назначение class document в fla файле. Проблема с вызовом конструктора. (Error #1009)

Сел за AS3 буквально пару дней.
разбираюсь с примером к оффициальному руководству.
Пример который про 3Д куб (если кто разбирался с ними).
класс fla документа задан как "cube".
Сам класс (cube.as):
Код AS3:
package {
	import flash.display.MovieClip;
	import flash.display.Graphics;
	import flash.events.MouseEvent;
	import flash.display.Stage;
	import flash.geom.Matrix3D;
	import flash.geom.Vector3D;
	import flash.display.GradientType;
	public class cube extends MovieClip {
		public var box:Box3D;  			 // the 3d box
		private var boxSides:Array = new Array(6); // the 6 faces of the box
		private var boxMat3D:Matrix3D;
 
		private var savedStageX:Number;
		private var savedStageY:Number;
		public function cube():void
		{
			for (var side:uint = 0; side < 6; side++) { 
				var s:MovieClip  = new MovieClip();
				s.graphics.beginFill(0x9ff << (side*4), 1);
				s.graphics.drawRect(0, 0, 256, 256);
				boxSides[side] = s;
			}
			box = new Box3D( boxSides[0], boxSides[1], boxSides[2], boxSides[3], boxSides[4], boxSides[5]);
 
			this.addChild(box);
			this.x = 250;
			this.y = 250;
			this.z = 500;
 
			boxMat3D = box.transform.matrix3D;
			savedStageX = stage.mouseX;
			savedStageY = stage.mouseY;
			stage.addEventListener(flash.events.MouseEvent.MOUSE_MOVE, mouseMoveH);
		}
 
		private function mouseMoveH(e:MouseEvent)
		{								    
			var diffY:Number = savedStageY - e.stageY;
			var diffX:Number = savedStageX - e.stageX;
			savedStageX = e.stageX;							savedStageY = e.stageY;
 
			boxMat3D.appendRotation(-diffY, Vector3D.X_AXIS);
			boxMat3D.appendRotation(diffX, Vector3D.Y_AXIS);
 
			box.ReorderChildren();
		}
	}
}
соответственно фрейм с действиями в fla пуст.
Когда я снимаю значение класса с fla документа и в фрейме действий принудительно вызываю конструктор класса (var cube1:cube = new cube() должен создаться экземпляр класса (если я ничего не путаю), ну и вообщем то ничего не создается (1009 ошибка).
Что я не так делаю?
Заранее благодарю за беспокойство.
исходники прикрепил
Вложения
Тип файла: rar AS3.rar (7.8 Кб, 101 просмотров)


Последний раз редактировалось wvxvw; 29.08.2009 в 06:21.
Старый 01.09.2009, 01:25
DaberMaN вне форума Посмотреть профиль Отправить личное сообщение для DaberMaN Найти все сообщения от DaberMaN
  № 2  
Ответить с цитированием
DaberMaN
[+4 20.02.09]

Регистрация: Feb 2009
Сообщений: 19
Кроме вызова конструктора нужно создать еще сам экземпляр, т.е. объявить потомка:
Код AS3:
var cube1:cube = new cube();
this.addChild(cube);
И через класс в этом случае невозможно добраться до сцены таким медодом (stage.addEve...)
Ну я так если кому интересно будет.

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

Регистрация: Sep 2002
Сообщений: 30,787
Цитата:
Сообщение от DaberMaN Посмотреть сообщение
Кроме вызова конструктора нужно создать еще сам экземпляр, т.е. объявить потомка:
Экземпляр уже создан при вызове конструктора. На то он и конструктор. addChild — это добавление в display list, а не «объявление потомка».

Ошибка 1009 вызвана тем, что в конструкторе идёт обращение к stage, который появится только после события ADDED_TO_STAGE, которое нужно дождаться.

Старый 01.09.2009, 10:49
DaberMaN вне форума Посмотреть профиль Отправить личное сообщение для DaberMaN Найти все сообщения от DaberMaN
  № 4  
Ответить с цитированием
DaberMaN
[+4 20.02.09]

Регистрация: Feb 2009
Сообщений: 19
ну да более правильное объяснение=)
а при каких условиях событие ADDED_TO_STAGE произойдет?

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

Регистрация: Sep 2002
Сообщений: 30,787
При addChild.

Старый 01.09.2009, 11:09
DaberMaN вне форума Посмотреть профиль Отправить личное сообщение для DaberMaN Найти все сообщения от DaberMaN
  № 6  
Ответить с цитированием
DaberMaN
[+4 20.02.09]

Регистрация: Feb 2009
Сообщений: 19
а если флеш все равно на код ругается и после addChild, в чем проблема?
А если перевожу event на box то проходит, но соответсвенно и отслеживает положение мыши только на box'е.

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

Регистрация: Sep 2002
Сообщений: 30,787
Прочтите ещё раз последнее предложение в 3 посте.

Старый 01.09.2009, 11:33
DaberMaN вне форума Посмотреть профиль Отправить личное сообщение для DaberMaN Найти все сообщения от DaberMaN
  № 8  
Ответить с цитированием
DaberMaN
[+4 20.02.09]

Регистрация: Feb 2009
Сообщений: 19
в fla документе вызывается конструктор и затем экземпляр класса (cube1) добавляем в дисплей лист, т.е. объявляем addChild(cube1); который в свою очередь возбуждает событие ADDED_TO_STAGE, вследствии чего появлется доступ к объекту stage. Я правильно Вас понял?

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

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

Старый 01.09.2009, 11:37
СлаваRa вне форума Посмотреть профиль Отправить личное сообщение для СлаваRa Найти все сообщения от СлаваRa
  № 10  
Ответить с цитированием
СлаваRa
 
Аватар для СлаваRa

блогер
Регистрация: Feb 2008
Адрес: http://playtika.com
Сообщений: 1,119
Записей в блоге: 5
Отправить сообщение для СлаваRa с помощью ICQ Отправить сообщение для СлаваRa с помощью Skype™
Цитата:
который в свою очередь возбуждает событие ADDED_TO_STAGE
после вам нужно отследить\"поймать" событие ADDED_TO_STAGE

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

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

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


 


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


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