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

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

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

Регистрация: Jun 2004
Адрес: Moscow
Сообщений: 51
Отправить сообщение для FSBmipt с помощью ICQ
По умолчанию проблема с отловом "onReleaseOutside"

Неожидпнно возникла проблема с отловом события - аналогом AS 2.0 'onReleaseOuside'.
В хелпе сказано следующее про MouseEventType.MOUSE_UP:
Цитата:
Replaces ActionScript 2.0 event(s) Mouse.onMouseUp, MovieClip.onMouseUp, Button.onReleaseOutside, MovieClip.onReleaseOutside, onClipEvent(mouseUp), on(releaseOutside).
Однако на деле при отпускании вне спрайта никакого ивента не диспатчится :-\
Вот демка:
Код:
package {
	import flash.display.Sprite;
	import flash.events.*;
	import flash.util.trace;
	
	public class ReleaseOutSideDemo extends Sprite {
		public function ReleaseOutSideDemo() {
			var sprite:Sprite = new Sprite();
			sprite.graphics.beginFill(0xcccccc);
			sprite.graphics.drawRect(0, 0, 100, 100);
			sprite.graphics.endFill();
			sprite.addEventListener(MouseEventType.MOUSE_UP, onMouseUp);
			addChild(sprite);
		}
		public function onMouseUp(e : MouseEvent):Void{
			trace(e.type);
		}
	}
}
Плюс, пока писал демку возник вопрос (скорее для понимания). Если в демке не использовать новый спрайт, а рисовать в текущем (т.е. var sprite:Sprite = new Sprite(); - убрать) и вешать обработчик MOUSE_UP на текущий спрайт, то ошибок нет, но события не диспатчатся (пробовал только на мышовых). Интересно было бы понять почему.

Старый 05.01.2006, 04:32
BlooDHounD вне форума Посмотреть профиль Отправить личное сообщение для BlooDHounD Посетить домашнюю страницу BlooDHounD Найти все сообщения от BlooDHounD
  № 2  
Ответить с цитированием
BlooDHounD
стервочка (я мужик)
 
Аватар для BlooDHounD

блогер
Регистрация: Mar 2004
Адрес: Борисов
Сообщений: 3,161
Записей в блоге: 22
Смотрим тутор у майка про палитру

setCapture();
releaseCapture();

это типа намёки, но я тебе ничё не гворил, ок?

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

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
>>Если рисовать в текущем и вешать обработчик MOUSE_UP на текущий спрайт, то ошибок нет, но события не диспатчатся ... Интересно было бы понять почему.
похоже потому, что события генерятся для DisplayObject, которых в этом случае нет,
поставь parent.addEventListener(MouseEventType.MOUSE_UP, onMouseUp), и все заработает..

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

Регистрация: Jun 2004
Адрес: Moscow
Сообщений: 51
Отправить сообщение для FSBmipt с помощью ICQ
По умолчанию спасибо, насчет setCapture() разобрался

Еще вчера разобрался в примере silin'а testDistort посмотрел

Старый 05.01.2006, 16:51
BlooDHounD вне форума Посмотреть профиль Отправить личное сообщение для BlooDHounD Посетить домашнюю страницу BlooDHounD Найти все сообщения от BlooDHounD
  № 5  
Ответить с цитированием
BlooDHounD
стервочка (я мужик)
 
Аватар для BlooDHounD

блогер
Регистрация: Mar 2004
Адрес: Борисов
Сообщений: 3,161
Записей в блоге: 22
тоСлин: Всё там диспатчится. и вешать на парент - это не отсюда.

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

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
Код:
package {
	import flash.display.Sprite;
	import flash.events.*;
	import flash.util.trace;
	public class ReleaseOutSideDemo extends Sprite {
		public function ReleaseOutSideDemo() {
			graphics.beginFill(0xcccccc);
			graphics.drawRect(0, 0, 100, 100);
			graphics.endFill();
			addEventListener(MouseEventType.MOUSE_UP, onMouseUp);
		}
		public function onMouseUp(e : MouseEvent):Void{
			trace(e.type);
		}
	}
}
так молчит, например..
>>и вешать на парент - это не отсюда
не понял: что не отсюда..

Старый 05.01.2006, 18:16
BlooDHounD вне форума Посмотреть профиль Отправить личное сообщение для BlooDHounD Посетить домашнюю страницу BlooDHounD Найти все сообщения от BlooDHounD
  № 7  
Ответить с цитированием
BlooDHounD
стервочка (я мужик)
 
Аватар для BlooDHounD

блогер
Регистрация: Mar 2004
Адрес: Борисов
Сообщений: 3,161
Записей в блоге: 22
Вешать событие на родителя не катит. Это значит, что событие будет уже не самого объекта, а его родителя, а это не есть гуд. К тому же парента может и не быть. Всё таки это временная переменная, и тогда у тя посыпятся ерроры.
Код:
		public function Box(w:Number = 30, h:Number = 255)
		{
			this.graphics.beginFill(0x000000);
			this.graphics.drawRect(0, 0, w, h);
			this.graphics.endFill();

			this.addEventListener(MouseEventType.MOUSE_DOWN, this.onPress, true);
		}

		// функция срабатывает на нажатие
		private function onPress(event:MouseEvent):Void
		{
			// ПРИМИЧАНИЕ: попробуйте закомментировать эту строку и повторить манипуляции
			// Увидим, что при выводе мышки за границы объекта, происходит
			// не то, что ожидается от неё.
			this.setCapture();
			// из-за неразберихи с областью действия и последовательностью обновления
			// назначаем события обработки "отпускания" и "движения" после нажатия.
			this.addEventListener(MouseEventType.MOUSE_MOVE, this.onMouseMove);
			this.addEventListener(MouseEventType.MOUSE_UP, this.onRelease);
		}

		// функция срабатывает на отпускание мыши
		private function onRelease(event:MouseEvent):Void
		{
			// удаляем события
			this.removeEventListener(MouseEventType.MOUSE_MOVE, this.onMouseMove);
			this.removeEventListener(MouseEventType.MOUSE_UP, this.onRelease);
			// проводим не хитрую операцию, которая возвращает область захвата в исходное состояние
			this.releaseCapture();
		}

		// функция срабатывает на движение мышки
		private function onMouseMove(event:MouseEvent):Void
		{
			event.updateAfterEvent();
		}
в removeEventListener и addEventListener 3 парметр как раз реакция на этот самый setCapture, releaseCapture. Можно начать 2 события, но с разным параметром, и события будут происзодить в разное вмея. Сдесь например срабатывает releaseOutSide.

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

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

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


 


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


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