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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 18.10.2009, 15:01
Furinax вне форума Посмотреть профиль Отправить личное сообщение для Furinax Найти все сообщения от Furinax
  № 1  
Ответить с цитированием
Furinax
[+1 02.09.15]

Регистрация: Mar 2009
Адрес: Moscow
Сообщений: 469
Question Экземпляр класса не создается

Делаю галерею, в которой кнопки со ссылками на работы должны добавляться программно на этапе выполнения.
Чтобы многократно не повторять код, сделал обобщенную функцию внутри класса, которая вызывается по таймеру. При вызове функции каждый раз должна создаваться одна кнопка. Но вот доходит до создания экземпляра класса кнопки, как выскакивает ошибка:
1120: Access of undefined property SubBtn.
В библиотеке имеется 5 символов и каждый слинкован с автоматически создаваемым класом (SubBtn1, SubBtn2, SubBtn3, SubBtn4, SubBtn5).
Привожу код класса:
Код AS3:
package forpage {
	import flash.display.MovieClip;
	import flash.utils.Timer;
	import flash.events.Event;
	import flash.events.MouseEvent;
	import flash.events.TimerEvent;
 
	public class WorkGalary extends MovieClip {
 
		public var opened:Boolean;
		private var localTimer1:Timer;
		private var localTimer2:Timer;
		private var repeatCount:uint;
		private var subBtnNumbers:Array;
		private var subBtnX:Array;
		private var subBtnY:Array;
		private var index:uint = 0;
		private var subBtn:SubBtn;
		private var win:MovieClip;
 
		public function WorkGalary (winSymbol:MovieClip) {
			subBtnNumbers = [1, 2, 3, 4, 5];
			subBtnX = [70, 70, 70, 355, 725];
			subBtnY = [100, 130, 160, 100, 100];
			repeatCount = 5;
			opened = true;
			win = winSymbol;
			addChild (win);
			localTimer1 = new Timer (710, repeatCount);
			localTimer1.addEventListener(TimerEvent.TIMER, localTimer1Handler);
			localTimer1.start();
		}
 
		public function makeRew ():void {
			localTimer2 = new Timer (100, 1);
			localTimer2.addEventListener(TimerEvent.TIMER, localTimer2Handler);
			localTimer2.start();
			win.addEventListener (Event.ENTER_FRAME, goBack);
		}
 
		public function goBack (e:Event):void {
			if (win == null) {
				throw new Error ("Symbol not defined");
			};
			try {
			win.prevFrame ();
			if (win.currentFrame == 1) {
				win.removeEventListener (Event.ENTER_FRAME, goBack);
				opened = false;
				parent.removeChild (this);
				}
			}
			catch (errObject:Error) {
				trace ("The message is: " + errObject.message);
			};
		};
 
		private function localTimer1Handler (e:TimerEvent):void {
			addSubBtns(subBtnNumbers[index], subBtnX[index], subBtnY[index]);
			index++;
		};
 
		private function localTimer2Handler (e:TimerEvent):void {
			removeSubBtns();
		};
 
		private function addSubBtns (index, X, Y):void {
			var newIndex = index;
			var newX = X;
			var newY = Y;
			trace ("REACHED TIL HERE!!!");
			subBtn[newIndex] = new SubBtn[newIndex]
			subBtn[newIndex].x = newX;
			subBtn[newIndex].y = newY;
			addChild(subBtn[newIndex]);
		};
 
		private function removeSubBtns ():void {
		};
	}
}
С помощью трассировки удалось узнать, что ошибка возникает при выполнении директивы new SubBtn[newIndex].
Подскажите пожалуйсто, как правильно это реализовать.


Последний раз редактировалось Furinax; 18.10.2009 в 15:10.
Старый 18.10.2009, 15:09
Felicast вне форума Посмотреть профиль Отправить личное сообщение для Felicast Найти все сообщения от Felicast
  № 2  
Ответить с цитированием
Felicast
 
Аватар для Felicast

Регистрация: Feb 2008
Адрес: Череповец
Сообщений: 623
Отправить сообщение для Felicast с помощью ICQ
Цитата:
Код AS3:
subBtn[newIndex] = new SubBtn[newIndex]
чета нифига не понял эту запись. вы от куда это взяли? может надо
Код AS3:
subBtn[newIndex] = new SubBtn();
да и subBtn у вас не массив, почему вы тогда по индексу обращаетесь? ничего не понятно
__________________
я могу стать всем, если только захочу

Старый 18.10.2009, 15:13
Furinax вне форума Посмотреть профиль Отправить личное сообщение для Furinax Найти все сообщения от Furinax
  № 3  
Ответить с цитированием
Furinax
[+1 02.09.15]

Регистрация: Mar 2009
Адрес: Moscow
Сообщений: 469
мне надо, чтобы каждый раз создавался не экземпляр нового класса, а не одного и того же, поэтому и запись
Код AS3:
subBtn[newIndex] = new SubBtn[newIndex]
а
Код AS3:
subBtn[newIndex] = new SubBtn();
в моем случае будет работать не так как мне надо.
Названия классов частично совпадают (SubBtn), и различаются только цифрой на конце (1, 2, 3 и т.д.)

Старый 18.10.2009, 15:20
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 4  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Код AS3:
var subBtns:Array = [MovieClip, Sprite];
var subBtn:Array = [];
var newIndex:int = 0;
subBtn[newIndex] = new (subBtns[newIndex])();
 
trace(subBtn[0]); // [object MovieClip]
Или я не понял вопрос.
__________________
Hell is the possibility of sanity

Старый 18.10.2009, 15:44
Furinax вне форума Посмотреть профиль Отправить личное сообщение для Furinax Найти все сообщения от Furinax
  № 5  
Ответить с цитированием
Furinax
[+1 02.09.15]

Регистрация: Mar 2009
Адрес: Moscow
Сообщений: 469
Поправил код, согласно вашей идее
Код AS3:
В переменных
		private var subBtns:Array;
		private var subBtnX:Array;
		private var subBtnY:Array;
		private var subBtn:Array;
В конструкторе
			subBtns = [SubBtn1, SubBtn2, SubBtn3, SubBtn4, SubBtn5];
			subBtnX = [70, 70, 70, 355, 725];
			subBtnY = [100, 130, 160, 100, 100];
			subBtn = [];
И в самой функции
		private function addSubBtns (index, X, Y):void {
			var newIndex = index;
			var newX = X;
			var newY = Y;
			trace ("REACHED TIL HERE!!!");
			subBtn[newIndex] = new (subBtns[newIndex])();
			subBtn[newIndex].x = newX;
			subBtn[newIndex].y = newY;
			addChild(subBtn[newIndex]);
		};
И теперь появилась новая ошибка:
TypeError: Error #1007: Попытка реализации в объекте, который не является конструктором.
at forpage::WorkGalary/addSubBtns()
at forpage::WorkGalary/localTimer1Handler()
at flash.utils::Timer/_timerDispatch()
at flash.utils::Timer/tick()


Последний раз редактировалось Furinax; 18.10.2009 в 15:47.
Старый 18.10.2009, 16:07
dimarik вне форума Посмотреть профиль Отправить личное сообщение для dimarik Найти все сообщения от dimarik
  № 6  
Ответить с цитированием
dimarik
.
 
Аватар для dimarik

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
Код AS3:
private function addSubBtns(index:uint, x:Number, y:Number):void {
	var c:Class = getDefinitionByName("SubBtn" + index) as Class;
 
	if (!c) {
		throw new IllegalOperationError('No class');
		return;
	}
 
	var button:DisplayObject = new c() as DisplayObject;
	button.x = x;
	button.y = y;
	this.subBtn[index] = button;
	super.addChild(button);
}
А Galary это по кавовски? =)
__________________
Воспитан в TimeZero. Работаю в Mail.ru.


Последний раз редактировалось dimarik; 18.10.2009 в 16:49.
Старый 18.10.2009, 16:07
Furinax вне форума Посмотреть профиль Отправить личное сообщение для Furinax Найти все сообщения от Furinax
  № 7  
Ответить с цитированием
Furinax
[+1 02.09.15]

Регистрация: Mar 2009
Адрес: Moscow
Сообщений: 469
перепиал к себе ваш код как есть, но вот это:
1118: Implicit coercion of a value with static type Object to a possibly unrelated type Class.

не дает проверить его в действии


Последний раз редактировалось Furinax; 18.10.2009 в 16:22.
Старый 18.10.2009, 16:32
dimarik вне форума Посмотреть профиль Отправить личное сообщение для dimarik Найти все сообщения от dimarik
  № 8  
Ответить с цитированием
dimarik
.
 
Аватар для dimarik

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
Код AS3:
var c:Class = getDefinitionByName("SubBtn" + index) as Class;
__________________
Воспитан в TimeZero. Работаю в Mail.ru.

Старый 18.10.2009, 16:40
Furinax вне форума Посмотреть профиль Отправить личное сообщение для Furinax Найти все сообщения от Furinax
  № 9  
Ответить с цитированием
Furinax
[+1 02.09.15]

Регистрация: Mar 2009
Адрес: Moscow
Сообщений: 469
Всем БОЛЬШОЕ СПАСИБО за попытку мне помочь (хоть у вас и ничего не удалось).
Я нашел собственное решение для этой проблемы (довольно таки простое).

Извините за ваше потраченное время.
Монстрский код Dimarik`a помог расширить мой кругозор в области As3.


Последний раз редактировалось Furinax; 18.10.2009 в 17:51.
Старый 18.10.2009, 22:18
dimarik вне форума Посмотреть профиль Отправить личное сообщение для dimarik Найти все сообщения от dimarik
  № 10  
Ответить с цитированием
dimarik
.
 
Аватар для dimarik

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
А в чем там проблема-то была? Поделитесь! =)
__________________
Воспитан в TimeZero. Работаю в Mail.ru.

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

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

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


 


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


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