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

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

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

Регистрация: May 2013
Сообщений: 8
По умолчанию addEventListener не является функцией

Здравствуйте.
Есть код:
Код AS3:
package 
{
	import flash.display.*;
	import flash.events.*;
	import flash.text.*;
 
	public class btnInputMl1 extends MovieClip
	{
		public function btnInputMl1()
		{
			this.addEventListener(MouseEvent.CLICK, clickHandler);
		}
		public function clickHandler(e:MouseEvent):void
		{
			pasword();
		}
		public function pasword()
		{
			this.removeEventListener(MouseEvent.CLICK,clickHandler);
			var textFormat:TextFormat = new TextFormat();
			textFormat.font = "Calibri";
			textFormat.color = 0x000000;
			textFormat.size = 25;
			var w:qwerty = new qwerty();
			addChild(w);
			var r:window = new window();
			addChild(r);
			var t:winpass = new winpass();
			t.x = 65;
			t.y = -100;
			addChild(t);
			var u:PassTxt = new PassTxt();
			u.x = -120;
			u.y = -100;
			addChild(u);
			var muu:TextField = new TextField();
			muu.setTextFormat(textFormat);
			addChild(muu);
 
			muu.type = TextFieldType.INPUT;
			muu.height = 42;
			muu.width = 167;
			muu.x = -20;
			muu.y = -122;
			muu.displayAsPassword = true;
			//muu.border = true;
			var a:vx = new vx();
			a.x = 0;
			a.y = 0;
			a.buttonMode = true;
			addChild(a);
			var wx:bbbtttnnn = new bbbtttnnn();
			addChild(wx);
			wx.x = 190;
			wx.y = -157;
			wx.addEventListener(MouseEvent.CLICK, exit);
			function exit(e:MouseEvent):void
			{
				removeChild(w);
				removeChild(r);
				removeChild(t);
				removeChild(u);
				removeChild(muu);
				removeChild(a);
				removeChild(wx);
				this.addEventListener(MouseEvent.CLICK, nnn);
				function nnn(e:MouseEvent):void
				{
					pasword();
					this.removeEventListener(MouseEvent.CLICK, nnn);
				}
				wx.removeEventListener(MouseEvent.CLICK, exit);
				a.removeEventListener(MouseEvent.CLICK, loginFunction);
 
				trace("1");
			}
			a.addEventListener(MouseEvent.CLICK, loginFunction);
 
			function loginFunction(e:MouseEvent):void
			{
				if (muu.text == "1")
				{
 
					trace("Complit!");
				}
				else
				{
					trace("неверный пароль");
				}
			}
		}
 
	}
}
При нажатии кнопки на сцене появляется окно с текстовым полем для ввода пароля, копка входа и и кнопка выхода из окна входа.
При нажатии кнопки выхода из окна входа убирается окно входа, но при повторном нажатии на кнопку на сцене флеш выдаёт ошибку:

TypeError: Error #1006: addEventListener не является функцией.
at MethodInfo-31()

И почему-то к полю ввода пароля не применяются шрифты.

Подскажите как это исправить.
Заранее спасибо.

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

блогер
Регистрация: Feb 2007
Адрес: Spb
Сообщений: 612
Записей в блоге: 8
Отправить сообщение для Rzer с помощью ICQ
Вынесите функции exit и loginFunction в класс и будет вам счастье. Чтобы применить формат нужно вместо строки
Код AS3:
muu.setTextFormat(textFormat);
написать строку
Код AS3:
muu.defaultTextFormat = textFormat;

Старый 23.05.2013, 13:47
PesaDelo вне форума Посмотреть профиль Отправить личное сообщение для PesaDelo Найти все сообщения от PesaDelo
  № 3  
Ответить с цитированием
PesaDelo

Регистрация: May 2013
Сообщений: 8
Шрифты пременились. Спасибо. А со слушателем проблема.
Сделал как вы сказали:
Код AS3:
package 
{
	import flash.display.*;
	import flash.events.*;
	import flash.text.*;
 
	public class btnInputMl1 extends MovieClip
	{
		public function btnInputMl1()
		{
			this.addEventListener(MouseEvent.CLICK, clickHandler);
		}
		public function clickHandler(e:MouseEvent):void
		{
			pasword();
		}
		public function pasword()
		{
			this.removeEventListener(MouseEvent.CLICK,clickHandler);
			var textFormat:TextFormat = new TextFormat();
			textFormat.font = "Calibri";
			textFormat.color = 0x000000;
			textFormat.size = 30;
			var w:qwerty = new qwerty();
			addChild(w);
			var r:window = new window();
			addChild(r);
			var t:winpass = new winpass();
			t.x = 65;
			t.y = -100;
			addChild(t);
			var u:PassTxt = new PassTxt();
			u.x = -120;
			u.y = -100;
			addChild(u);
			var muu:TextField = new TextField();
			muu.defaultTextFormat = textFormat;
			addChild(muu);
			muu.type = TextFieldType.INPUT;
			muu.height = 42;
			muu.width = 167;
			muu.x = -20;
			muu.y = -122;
			muu.displayAsPassword = true;
			//muu.border = true;
			var a:vx = new vx();
			a.x = 0;
			a.y = 0;
			a.buttonMode = true;
			addChild(a);
			var wx:bbbtttnnn = new bbbtttnnn();
			addChild(wx);
			wx.x = 190;
			wx.y = -157;
			wx.addEventListener(MouseEvent.CLICK, exit);
 
			a.addEventListener(MouseEvent.CLICK, loginFunction);
 
 
		}
		public function exit(e:MouseEvent):void
		{
			removeChild(w);
			removeChild(r);
			removeChild(t);
			removeChild(u);
			removeChild(muu);
			removeChild(a);
			removeChild(wx);
			this.addEventListener(MouseEvent.CLICK, nnn);
			function nnn(e:MouseEvent):void
			{
				pasword();
				this.removeEventListener(MouseEvent.CLICK, nnn);
			}
			wx.removeEventListener(MouseEvent.CLICK, exit);
			a.removeEventListener(MouseEvent.CLICK, loginFunction);
 
			trace("1");
		}
		public function loginFunction(e:MouseEvent):void
		{
			if (muu.text == "1")
			{
 
				trace("Complit!");
			}
			else
			{
				trace("неверный пароль");
			}
		}
 
	}
}
Теперь он выдает такие ошибки:
C:\Users\Mixail\Desktop\es\btnInputMl1.as, строка 63 1120: Обращение несуществующего свойства w.
C:\Users\Mixail\Desktop\es\btnInputMl1.as, строка 64 1120: Обращение несуществующего свойства r.
C:\Users\Mixail\Desktop\es\btnInputMl1.as, строка 65 1120: Обращение несуществующего свойства t.
C:\Users\Mixail\Desktop\es\btnInputMl1.as, строка 66 1120: Обращение несуществующего свойства u.
C:\Users\Mixail\Desktop\es\btnInputMl1.as, строка 67 1120: Обращение несуществующего свойства muu.
C:\Users\Mixail\Desktop\es\btnInputMl1.as, строка 68 1120: Обращение несуществующего свойства a.
C:\Users\Mixail\Desktop\es\btnInputMl1.as, строка 69 1120: Обращение несуществующего свойства wx.
C:\Users\Mixail\Desktop\es\btnInputMl1.as, строка 76 1120: Обращение несуществующего свойства wx.
C:\Users\Mixail\Desktop\es\btnInputMl1.as, строка 77 1120: Обращение несуществующего свойства a.
C:\Users\Mixail\Desktop\es\btnInputMl1.as, строка 83 1120: Обращение несуществующего свойства muu.

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

блогер
Регистрация: Feb 2008
Адрес: http://playtika.com
Сообщений: 1,119
Записей в блоге: 5
Отправить сообщение для СлаваRa с помощью ICQ Отправить сообщение для СлаваRa с помощью Skype™
Конечно, откуда у вас в методе exit возьмутся локальные переменные из метода pasword.
Плюс к этому в методах типа nnn, this нет и не было, тоже будет ошибка.
__________________
местонахождение

Старый 23.05.2013, 14:04
PesaDelo вне форума Посмотреть профиль Отправить личное сообщение для PesaDelo Найти все сообщения от PesaDelo
  № 5  
Ответить с цитированием
PesaDelo

Регистрация: May 2013
Сообщений: 8
Как исправить то.
Можно ли добавить как-то в метод типа nnn this.

Старый 23.05.2013, 16:31
Rzer вне форума Посмотреть профиль Отправить личное сообщение для Rzer Посетить домашнюю страницу Rzer Найти все сообщения от Rzer
  № 6  
Ответить с цитированием
Rzer
 
Аватар для Rzer

блогер
Регистрация: Feb 2007
Адрес: Spb
Сообщений: 612
Записей в блоге: 8
Отправить сообщение для Rzer с помощью ICQ
Видимо ты раньше кодил на js. Во Flash все переменные, которые ты планируешь использовать в нескольких местах нужно объявлять в начале класса. Почитай про области видимости переменных. Функции внутри функций лучше не создавать. Их нужно объявлять на одном уровне - уровне класса.

Старый 23.05.2013, 17:20
PesaDelo вне форума Посмотреть профиль Отправить личное сообщение для PesaDelo Найти все сообщения от PesaDelo
  № 7  
Ответить с цитированием
PesaDelo

Регистрация: May 2013
Сообщений: 8
Объявил переменные на уровне класса:
Код AS3:
package 
{
	import flash.display.*;
	import flash.events.*;
	import flash.text.*;
 
	public class btnInputMl1 extends MovieClip
	{
		public static var e:qwerty;
		public static var r:window;
		public static var t:winpass;
		public static var u:PassTxt;
		public static var muu:TextField;
		public static var a:vx;
		public static var wx:bbbtttnnn;
 
		public function btnInputMl1()
		{
			this.addEventListener(MouseEvent.CLICK, clickHandler);
 
		}
		public function clickHandler(e:MouseEvent):void
		{
			pasword();
		}
		public function pasword()
		{
			this.removeEventListener(MouseEvent.CLICK,clickHandler);
			var textFormat:TextFormat = new TextFormat();
			textFormat.font = "Calibri";
			textFormat.color = 0x000000;
			textFormat.size = 30;
			btnInputMl1.e = new qwerty();
			addChild(btnInputMl1.e);
			btnInputMl1.r = new window();
			addChild(btnInputMl1.r);
			btnInputMl1.t = new winpass();
			btnInputMl1.t.x = 65;
			btnInputMl1.t.y = -100;
			addChild(btnInputMl1.t);
			btnInputMl1.u = new PassTxt();
			btnInputMl1.u.x = -120;
			btnInputMl1.u.y = -100;
			addChild(btnInputMl1.u);
			btnInputMl1.muu = new TextField();
			muu.defaultTextFormat = textFormat;
			addChild(muu);
			muu.type = TextFieldType.INPUT;
			muu.height = 42;
			muu.width = 167;
			muu.x = -20;
			muu.y = -122;
			muu.displayAsPassword = true;
			btnInputMl1.a = new vx();
			btnInputMl1.a.x = 0;
			btnInputMl1.a.y = 0;
			btnInputMl1.a.buttonMode = true;
			addChild(btnInputMl1.a);
			btnInputMl1.wx = new bbbtttnnn();
			addChild(btnInputMl1.wx);
			btnInputMl1.wx.x = 190;
			btnInputMl1.wx.y = -157;
			btnInputMl1.wx.addEventListener(MouseEvent.CLICK, exit);
			btnInputMl1.a.addEventListener(MouseEvent.CLICK, loginFunction);
		}
		public function exit(e:MouseEvent):void
		{
			removeChild(btnInputMl1.e);
			removeChild(btnInputMl1.r);
			removeChild(btnInputMl1.t);
			removeChild(btnInputMl1.u);
			removeChild(btnInputMl1.muu);
			removeChild(btnInputMl1.a);
			removeChild(btnInputMl1.wx);
			this.addEventListener(MouseEvent.CLICK, nnn);
			function nnn(e:MouseEvent):void
			{
				pasword();
				this.removeEventListener(MouseEvent.CLICK,nnn);
			}
			wx.removeEventListener(MouseEvent.CLICK, exit);
			a.removeEventListener(MouseEvent.CLICK, loginFunction);
			trace("myau!!!!!");
		}
		public function loginFunction(e:MouseEvent):void
		{
			if (muu.text == "qwerty")
			{
				trace("Complit!");
			}
			else
			{
				var lkj:qwerty = new qwerty();
				addChild(lkj);
				var ghj:ancorrectPassword = new ancorrectPassword();
				addChild(ghj);
				var ert:bbbtttnnn = new bbbtttnnn();
				addChild(ert);
				ert.x = 150;
				ert.y = -70;
				ert.addEventListener(MouseEvent.CLICK, kkk);
				function kkk(e:MouseEvent):void
				{
					removeChild(lkj);
					removeChild(ghj);
					removeChild(ert);
					ert.removeEventListener(MouseEvent.CLICK,kkk);
					ert.removeEventListener(KeyboardEvent.KEY_DOWN, onKeyboardDown);
				}
				ert.addEventListener(KeyboardEvent.KEY_DOWN, onKeyboardDown);
				function onKeyboardDown(event:KeyboardEvent):void
				{
					if (event.keyCode == 27)
					{
						removeChild(lkj);
						removeChild(ghj);
						removeChild(ert);
						ert.removeEventListener(MouseEvent.CLICK,kkk);
						ert.removeEventListener(KeyboardEvent.KEY_DOWN, onKeyboardDown);
					}
				}
			}
		}
	}
}
Но всё равно появляется ошибка:
TypeError: Error #1006: removeEventListener не является функцией.
at MethodInfo-31()

как в nnn добавить this?

а если сделать так:
Код AS3:
public function exit(e:MouseEvent):void
		{
			removeChild(btnInputMl1.e);
			removeChild(btnInputMl1.r);
			removeChild(btnInputMl1.t);
			removeChild(btnInputMl1.u);
			removeChild(btnInputMl1.muu);
			removeChild(btnInputMl1.a);
			removeChild(btnInputMl1.wx);
			wx.removeEventListener(MouseEvent.CLICK, exit);
			a.removeEventListener(MouseEvent.CLICK, loginFunction);
			trace("myau!!!!!");
			this.addEventListener(MouseEvent.CLICK, nnn);
		}
		public function nnn(e:MouseEvent):void
		{
			pasword();
			this.removeEventListener(MouseEvent.CLICK,nnn);
		}
то при нажимании на кнопку закрытия окна входа ничего не происходит.


Последний раз редактировалось PesaDelo; 23.05.2013 в 17:33.
Старый 23.05.2013, 17:30
СлаваRa вне форума Посмотреть профиль Отправить личное сообщение для СлаваRa Найти все сообщения от СлаваRa
  № 8  
Ответить с цитированием
СлаваRa
 
Аватар для СлаваRa

блогер
Регистрация: Feb 2008
Адрес: http://playtika.com
Сообщений: 1,119
Записей в блоге: 5
Отправить сообщение для СлаваRa с помощью ICQ Отправить сообщение для СлаваRa с помощью Skype™
Где у вас ошибка с лога не понятно, разбираться в этом ужасе желания нет.
Цитата:
как в nnn добавить this?
Можно не добавлять его туда вообще, сработает как надо и без this.
Анонимки\замыкания не надо! использовать в подписках на события мыша.
Имена типа bbbtttnnn - это просто ужас, как можно работать с таким кодом, непонятно(
И this'ы у вас не по месту используются, лучше уберите их совсем
__________________
местонахождение

Старый 23.05.2013, 18:03
PesaDelo вне форума Посмотреть профиль Отправить личное сообщение для PesaDelo Найти все сообщения от PesaDelo
  № 9  
Ответить с цитированием
PesaDelo

Регистрация: May 2013
Сообщений: 8
Убрал this:
Код AS3:
public function exit(e:MouseEvent):void
		{
			removeChild(btnInputMl1.e);
			removeChild(btnInputMl1.r);
			removeChild(btnInputMl1.t);
			removeChild(btnInputMl1.u);
			removeChild(btnInputMl1.muu);
			removeChild(btnInputMl1.a);
			removeChild(btnInputMl1.wx);
			wx.removeEventListener(MouseEvent.CLICK, exit);
			a.removeEventListener(MouseEvent.CLICK, loginFunction);
			trace("myau!!!!!");
			addEventListener(MouseEvent.CLICK, clickHandler);
		}
public function clickHandler(e:MouseEvent):void
		{
			pasword();
			removeEventListener(MouseEvent.CLICK,clickHandler);
		}
Всё равно при нажимании на кнопку закрытия окна входа, ничего не происходит.

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

блогер
Регистрация: Feb 2008
Адрес: http://playtika.com
Сообщений: 1,119
Записей в блоге: 5
Отправить сообщение для СлаваRa с помощью ICQ Отправить сообщение для СлаваRa с помощью Skype™
а trace("myau!!!!!"); срабатывает?

Код AS3:
addEventListener(MouseEvent.CLICK, clickHandler);
function clickHandler(e:MouseEvent):void
{
	pasword();
	removeEventListener(MouseEvent.CLICK,clickHandler);
}
можно заменить на
Код AS3:
addEventListener(MouseEvent.CLICK, clickHandler);
убрав никчемную локальную функцию
__________________
местонахождение

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

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

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


 


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


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