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

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

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

Регистрация: Jun 2005
Адрес: Ru, irk
Сообщений: 92
Отправить сообщение для AlDev с помощью ICQ Отправить сообщение для AlDev с помощью MSN Отправить сообщение для AlDev с помощью Yahoo
По умолчанию addEventListener

Господа, вот такая вот проблемка. Пишу код:
Код:
package 
{
	import flash.display.Sprite;
	import flash.display.SimpleButton;
	import flash.display.Shape;
	import flash.events.MouseEvent;
	import flash.events.MouseEventType;
	import flash.util.trace;
	
	public class myApp extends Sprite
	{
		protected var b:Array;
		public function myApp() 
		{
			this.b = new Array();
			for (var i:uint = 0;i<10;i++)
			{
				this.b[i] = new myButton();
				this.b[i].x = 60*i;
				this.b[i].y = 10;
				this.b[i].addEventListener(MouseEventType.CLICK,this.onButtonClick);
				this.addChild(this.b[i]);
			}
		}
		
		protected function onButtonClick(evnt:MouseEvent):Void
		{
			trace ('onRelease called');
		}
	}
	
	private class myButton extends SimpleButton
	{
		protected var downSprite:Shape;
		protected var upSprite:Shape;
			
		public function myButton()
		{
			this.downSprite = new Shape();
			this.downSprite.graphics.lineStyle(2, 0x202020);
			this.downSprite.graphics.beginFill(0x00FF00);
			this.downSprite.graphics.drawRect(10, 10, 50, 50);
			 
			this.upSprite = new Shape();
			this.upSprite.graphics.lineStyle(2, 0x202020);
			this.upSprite.graphics.beginFill(0xFFFF00);
			this.upSprite.graphics.drawRect(10, 10, 50, 50);
			
			this.upState = upSprite;
			this.overState = upSprite;
			this.downState = downSprite;
			this.useHandCursor = true;
			this.hitTestState = this;
		}
	}
}
а проблемка в том, что событие срабатывает только для первого элемента в массиве.
Объясните, pls, почему?
__________________
Infernal error: чёрт сломал ногу, пытаясь разобраться в вашем коде
---
my blog:
http://batsuev.com/wp/

Старый 07.12.2005, 09:26
Antares вне форума Посмотреть профиль Найти все сообщения от Antares
  № 2  
Ответить с цитированием
Antares
Banned
[+1 16.05.2006]
[++1 16.05.2006]
[+ 1 21.05.06]
[++ за хамство]
[+1 21.05.2006]
 
Аватар для Antares

Регистрация: Dec 2003
Сообщений: 3,925
Такие вещи изначально объявляются в конструкторе, а не n раз для каждого экземпляра


Последний раз редактировалось Antares; 07.12.2005 в 09:32.
Старый 08.12.2005, 15:58
AlDev вне форума Посмотреть профиль Отправить личное сообщение для AlDev Посетить домашнюю страницу AlDev Найти все сообщения от AlDev
  № 3  
Ответить с цитированием
AlDev
 
Аватар для AlDev

Регистрация: Jun 2005
Адрес: Ru, irk
Сообщений: 92
Отправить сообщение для AlDev с помощью ICQ Отправить сообщение для AlDev с помощью MSN Отправить сообщение для AlDev с помощью Yahoo
хм. а почему тогда событие всё-таки срабатывает только для первого? и почему оно вообще срабатывает?
__________________
Infernal error: чёрт сломал ногу, пытаясь разобраться в вашем коде
---
my blog:
http://batsuev.com/wp/

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

Регистрация: Jun 2005
Сообщений: 107
Отправить сообщение для Mokus с помощью ICQ
Ответ у тебя в блоге.
Между прочим конструкции типа
this.b[i] = new myButton();
ЗЛО.
так нехорошо в масив елементы добавлять... просто нехорошо... и некрасиво...
Если начал баловаться с АС3 - старайся отучатся от АС1 стиля программирования.

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

Регистрация: Mar 2004
Адрес: Областной центр "sump"
Сообщений: 202
Отправить сообщение для s_u_m_p с помощью ICQ
2 Mocus: а можно объснить подробно почему именно такой подход (добавление в массив) неправилен?
__________________
:::::::::::: sump ::::::::::::

Старый 08.12.2005, 19:53
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 6  
Ответить с цитированием
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
Интересно, что кому-то еще кнопки в старом флеше не надоели, давай их и здесь мучать.., это я к тому, при всей неправильности такая же схема со спрайтом нормально работает:
Код:
package
{
	import flash.display.Sprite;
	import flash.display.SimpleButton;
	import flash.display.Shape;
	import flash.events.MouseEvent;
	import flash.events.MouseEventType;
	import flash.util.trace;
	
	public class myApp extends Sprite
	{
		protected var b:Array;
		public function myApp()
		{
			this.b = new Array();
			for (var i:uint = 0;i<10;i++)
			{
				this.b[i] = new myButton();
				this.b[i].x = 60*i;
				this.b[i].y = 10;
				this.b[i].addEventListener(MouseEventType.CLICK,this.onButtonClick);
				this.addChild(this.b[i]);
			}
		}
	
		protected function onButtonClick(evnt:MouseEvent):Void
		{
			trace ('onRelease called');
		}
	}
	
	private class myButton extends Sprite
	{
		public function myButton()
		{
			graphics.lineStyle(2, 0x202020);
			graphics.beginFill(0x00FF00);
			graphics.drawRect(10, 10, 50, 50);
	
		}
	}
}

Старый 08.12.2005, 20:33
Antares вне форума Посмотреть профиль Найти все сообщения от Antares
  № 7  
Ответить с цитированием
Antares
Banned
[+1 16.05.2006]
[++1 16.05.2006]
[+ 1 21.05.06]
[++ за хамство]
[+1 21.05.2006]
 
Аватар для Antares

Регистрация: Dec 2003
Сообщений: 3,925
Цитата:
Сообщение от s_u_m_p
2 Mocus: а можно объснить подробно почему именно такой подход (добавление в массив) неправилен?
Потому что очень легко не просто не добавить новое куда надо, но и прибить старое. Подходы, использующие push/pop/shift технику гораздо безопаснее и спасают от головной боли.

Но это не про АС3.

Старый 09.12.2005, 12:21
Mokus вне форума Посмотреть профиль Отправить личное сообщение для Mokus Найти все сообщения от Mokus
  № 8  
Ответить с цитированием
Mokus

Регистрация: Jun 2005
Сообщений: 107
Отправить сообщение для Mokus с помощью ICQ
Цитата:
Сообщение от s_u_m_p
2 Mocus: а можно объснить подробно почему именно такой подход (добавление в массив) неправилен?
Потому, что там должен ексепшн выскакивать еще когда ты только ссылаешся на несуществующий елемент массива, а если не выскакивает - то ето означает, что клас Array - кривой и ненадо под его кривизну самому изгибатся. И если такие мелкие ошибки в Бете не исправят, то работу с АС3 прийдется начинать с переписывания базовых классов...

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

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

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


 


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


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