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

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

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

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
По умолчанию События остаются после их удаления

вопрос снят.

Вопрос другого плана. Если кнопка подписана на 2 события клика, и одно из событий было удалено, то при нажатии все равно срабатывают оба. Как разрешить срабатывать только тому, которое не было удалено?! ( какой нить там preventDefault )
__________________
Марк Tween


Последний раз редактировалось in4core; 14.10.2012 в 02:54.
Старый 14.10.2012, 05:24
strangedk вне форума Посмотреть профиль Отправить личное сообщение для strangedk Найти все сообщения от strangedk
  № 2  
Ответить с цитированием
strangedk
 
Аватар для strangedk

Регистрация: Oct 2010
Адрес: Харьков
Сообщений: 616
Записей в блоге: 1
Отправить сообщение для strangedk с помощью ICQ Отправить сообщение для strangedk с помощью Skype™
т.е. после removeEventListener обработчик всё равно продолжает срабатывать?
__________________
adobe AS3 manual

Старый 14.10.2012, 12:43
gagaga вне форума Посмотреть профиль Отправить личное сообщение для gagaga Найти все сообщения от gagaga
  № 3  
Ответить с цитированием
gagaga

Регистрация: Apr 2012
Сообщений: 239
stopPropogation()

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

Регистрация: Jul 2007
Сообщений: 393
Событие нельзя "удалить". Можно удалить слушатель, если он удален правильно-срабатывать не будет
preventDefault-предотвращает действие "по умолчанию", для ввода текста, например, отменяет ввод текста.
stopPropogation() отменяет всплытие.

Что точно вам надо?

Старый 14.10.2012, 15:26
in4core вне форума Посмотреть профиль Отправить личное сообщение для in4core Найти все сообщения от in4core
  № 5  
Ответить с цитированием
in4core
 
Аватар для in4core

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
Цитата:
т.е. после removeEventListener обработчик всё равно продолжает срабатывать?
Ага, если зарегестрировано 2 события. У мня было сделано так : был класс кнопки, подписанный на клик, ну обычная анимация, - добавляем кнопку в дисплей лист и подписываем ее на другой клик ( тоесть поверх ) - для выполнения какого нибудь действия. Далее - снимаем слушатель изнутри ( внешний оставляем ) - жмем - получаем выполнение и первого и второго )))

Цитата:
Событие нельзя "удалить". Можно удалить слушатель,
Кеп спасибо конечно, но я не первый день в программировании )
__________________
Марк Tween

Старый 14.10.2012, 23:12
Frost47rus вне форума Посмотреть профиль Отправить личное сообщение для Frost47rus Найти все сообщения от Frost47rus
  № 6  
Ответить с цитированием
Frost47rus

Регистрация: May 2012
Сообщений: 131
Цитата:
Сообщение от in4core Посмотреть сообщение
Ага, если зарегестрировано 2 события. У мня было сделано так : был класс кнопки, подписанный на клик, ну обычная анимация, - добавляем кнопку в дисплей лист и подписываем ее на другой клик ( тоесть поверх ) - для выполнения какого нибудь действия. Далее - снимаем слушатель изнутри ( внешний оставляем ) - жмем - получаем выполнение и первого и второго )))

Кеп спасибо конечно, но я не первый день в программировании )
да, скорее всего - второй день. здравомыслящие люди не будут вешать два слушателя на клик на одну кнопку, а создадут условия в обработчике.

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

Регистрация: Aug 2008
Адрес: Рязань
Сообщений: 723
насколько я понял у тебя обычный баблинг происходит, stopPropogation() в первом листенере пропиши
__________________
low +

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

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
Frost47rus - мне кажется Вы Алеша! - или Вася - неважно.
Цитата:
здравомыслящие люди не будут вешать два слушателя на клик на одну кнопку
)) ты просто красавец. На будущее тебя просвещу, - нормальные люди вешают либо 1 либо 2 события. 1 событие вешается, если кнопка создана программно, или графически , не задействуя функционал . То в одном событии описывается и функционал и анимация(поведение). А есть случай, когда будете разрабатывать игры или хотя бы что то похожее - голова поймет, что для массовых кнопок прописывается ОБЩИЙ функционал сразу, - а функционал запуска - прописывается уже после, - получается 2 события ! Учи мат часть.

Jewelz - видимо, хотя помоему, я проверял, баблинг выставлен в false. Может не доглядел. Все равно интересно, давай порассуждаем . CLICK , CLICK - c первого сняли. ( тоесть внутренний ) - раз мы его сняли , то причем тут баблинг? - его уже нет. Остался внешний , получается внешний может баблится как наверх так и вниз? - если так, я походу нуб, и учить мат часть мне! Но насколько я помню баблится - вверх.

Добавлено через 53 секунды
Frost47rus - мне кажется Вы Алеша! - или Вася - неважно.
Цитата:
здравомыслящие люди не будут вешать два слушателя на клик на одну кнопку
)) ты просто красавец. На будущее тебя просвещу, - нормальные люди вешают либо 1 либо 2 события. 1 событие вешается, если кнопка создана программно, или графически , не задействуя функционал . То в одном событии описывается и функционал и анимация(поведение). А есть случай, когда будете разрабатывать игры или хотя бы что то похожее - голова поймет, что для массовых кнопок прописывается ОБЩИЙ функционал сразу, - а функционал запуска - прописывается уже после, - получается 2 события ! Учи мат часть.

Jewelz - видимо, хотя помоему, я проверял, баблинг выставлен в false. Может не доглядел. Все равно интересно, давай порассуждаем . CLICK , CLICK - c первого сняли. ( тоесть внутренний ) - раз мы его сняли , то причем тут баблинг? - его уже нет. Остался внешний , получается внешний может баблится как наверх так и вниз? - если так, я походу нуб, и учить мат часть мне! Но насколько я помню баблится - вверх.
__________________
Марк Tween

Старый 15.10.2012, 10:52
Frost47rus вне форума Посмотреть профиль Отправить личное сообщение для Frost47rus Найти все сообщения от Frost47rus
  № 9  
Ответить с цитированием
Frost47rus

Регистрация: May 2012
Сообщений: 131
Цитата:
Сообщение от in4core Посмотреть сообщение
Frost47rus - мне кажется Вы Алеша! - или Вася - неважно. )) ты просто красавец. На будущее тебя просвещу, - нормальные люди вешают либо 1 либо 2 события. 1 событие вешается, если кнопка создана программно, или графически , не задействуя функционал . То в одном событии описывается и функционал и анимация(поведение). А есть случай, когда будете разрабатывать игры или хотя бы что то похожее - голова поймет, что для массовых кнопок прописывается ОБЩИЙ функционал сразу, - а функционал запуска - прописывается уже после, - получается 2 события ! Учи мат часть.
какая разница как создана кнопка? =)
листенер на клик у кнопки - один! =)
листенер на лэйауте - это листенер на лэйауте, но не на кнопке.
и внутренний клик эвент в кнопке всего лишь диспетчит какое-либо событие, как правило такое же.
извне - слушатель на одно событие - один.
не надо пудрить людям мозги. этот форум будут читать и новички - а вы им мозги запудриваете.

Добавлено через 42 минуты
Вот вам пример стандартной кнопки. Создаётся такая кнопка в Flash CS ручками послойно из графических ресурсов. Отрисовывается hitArea для каждой, если кнопки разные. Соответственно, имена полей - так же проставляются вручную ( по дефолту - 4 лейбла на 4 кадрах, 1 - для hitArea, 1 - для текстового поля.
Вешаются листенеры на такую кнопку как и на обычный SimpleButton.

Код AS3:
package ru.domain.project.view.gui.buttons {
	import flash.display.*;
	import flash.events.*;
	import flash.text.*;
	/**
	 * ...
	 * @author Frost
	 */
	public class MyButton extends EventDispatcher {
		private var hitArea:MovieClip;
		private var layout:MovieClip;
		private var _enabled:Boolean;
 
		public function MyButton(mc:MovieClip) {
			layout = mc;
			if (layout.getChildByName('hit') == null) {
				trace('MYBTN_ERROR: Cant find hit layer in MovieClip: ' + mc.name);
				return;
			}			
			hitArea = layout.getChildByName('hit') as MovieClip;
			enabled = true;
		}
 
		private function turnOn():void {
			hitArea.buttonMode = true;
			hitArea.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown);
			hitArea.addEventListener(MouseEvent.ROLL_OVER, onRollOver);
			hitArea.addEventListener(MouseEvent.ROLL_OUT, onRollOut);			
			hitArea.addEventListener(MouseEvent.MOUSE_UP, onMouseUp);
			hitArea.addEventListener(MouseEvent.CLICK, onClick);			
			layout.gotoAndStop('up');
		}
 
		private function turnOff():void {
			hitArea.buttonMode = false;
			hitArea.removeEventListener(MouseEvent.MOUSE_DOWN, onMouseDown);
			hitArea.removeEventListener(MouseEvent.ROLL_OVER, onRollOver);
			hitArea.removeEventListener(MouseEvent.ROLL_OUT, onRollOut);			
			hitArea.removeEventListener(MouseEvent.MOUSE_UP, onMouseUp);
			hitArea.removeEventListener(MouseEvent.CLICK, onClick);
			layout.gotoAndStop('disabled');
		}
 
		public function get enabled():Boolean {
			return _enabled;
		}
 
		public function set enabled(val:Boolean):void {
			_enabled = val;
			(_enabled == true) ? turnOn() : turnOff();
		}
 
		public function text(txt:String):void {			
			var tf:TextField = layout.getChildByName('tf') as TextField;
			formatTextField(tf, txt);			
		}
 
		private function formatTextField(tf:TextField, e:String):void {
			tf.text = e;
			tf.selectable = false;
			//some other format settings
		}
 
		private function onClick(e:MouseEvent):void {
			dispatchEvent(new MouseEvent(MouseEvent.CLICK));			
		}
 
		private function onRollOver(e:MouseEvent):void {
			layout.gotoAndStop('over');
			dispatchEvent(new MouseEvent(MouseEvent.ROLL_OVER));
		}
 
		private function onRollOut(e:MouseEvent):void {
			layout.gotoAndStop('up');
			dispatchEvent(new MouseEvent(MouseEvent.ROLL_OUT));
		}
 
		private function onMouseUp(e:MouseEvent):void {
			layout.gotoAndStop('up');
		}
 
		private function onMouseDown(e:MouseEvent):void {
			layout.gotoAndStop('down');
		}		
	}
}

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

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
вообще-то если кнопка дважды подписана на событие клика, и один из обработчиков был удален, то при нажатии срабатывает только тот, что остался
Код AS3:
package
{
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.events.MouseEvent;
 
 
	public class Main extends Sprite
	{
 
		public function Main():void
		{
			var but:But = new But();
			but.addEventListener(MouseEvent.CLICK, but_click);
			addChild(but);
		}
 
		private function but_click(e:MouseEvent):void
		{
			trace("Main.but_click > e : " + e);
 
		}
 
	}
 
}
import flash.display.Sprite;
import flash.events.MouseEvent;
 
class But extends Sprite
{
	public function But()
	{
		graphics.beginFill(0x008000);
		graphics.drawRect(0, 0, 50, 50);
		this.addEventListener(MouseEvent.CLICK, this_click);
	}
 
	private function this_click(e:MouseEvent):void
	{
		trace("But.this_click > e : " + e);
		// удаляем (и больше этого трейса не видим)
		this.removeEventListener(MouseEvent.CLICK, this_click);
	}
 
}
а что происходит у ТС, из его описания понять как-то затруднительно
пример м.б. ?

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

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

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


 


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


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