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

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

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

блогер
Регистрация: Sep 2008
Адрес: Менск
Сообщений: 586
Записей в блоге: 1
Отправить сообщение для incvizitor с помощью Skype™
По умолчанию Объект не распространяет событие...

Есть javascript код, который на правый клик вызывает через коллбэк нейкую функцию RightClick. AS3 смотрит все объекты что находяться под мышкой, самый верхний распростораняет событие RightMouseEvent. На объекты просто вешаеться листенер. Только вот проблемка что событие не распростаняеться, хотя по тестам видно что запрос на распространение происходит... что не так?

Код AS3:
package  
{
	import flash.display.DisplayObject;
	import flash.display.MovieClip;
	import flash.events.Event;
	import flash.events.MouseEvent;
	import vaukalak.utils.RightMouseEvent;
 
	/**
	 * ...
	 * @author vaukalak
	 */
	public class Main extends MovieClip
	{
 
		public function Main() {
 
			RightMouseEvent.enable(stage);
 
			obj1.addEventListener(RightMouseEvent.CLICK, _onRightClick);
			obj2.addEventListener(RightMouseEvent.CLICK, _onRightClick);
			obj3.addEventListener(RightMouseEvent.CLICK, _onRightClick);
			obj4.addEventListener(RightMouseEvent.CLICK, _onRightClick);
 
			//(obj1 as DisplayObject).dispatchEvent(new RightMouseEvent(RightMouseEvent.CLICK));
                        //если прописать тут распротраняеться. 
		}
 
		private function _onRightClick(e:Event):void {
			(e.target as DisplayObject).x += 100;
		}	
	}
 
}
Код AS3:
package vaukalak.utils 
{
	import flash.display.DisplayObject;
	import flash.display.InteractiveObject;
	import flash.display.Stage;
	import flash.events.Event;
	import flash.external.ExternalInterface;
	import flash.geom.Point;
 
	/**
	 * ...
	 * @author vaukalak
	 */
	public class RightMouseEvent extends Event 
	{
 
		public static const CLICK:String = "Right Click";
		private static var _stage:Stage;
 
		//переопределения класса Event
 
		public function RightMouseEvent(type:String, bubbles:Boolean=false, cancelable:Boolean=false) 
		{ 
			super(type, bubbles, cancelable);
		} 
 
		public override function clone():Event 
		{ 
			return new RightMouseEvent(type, bubbles, cancelable);
		} 
 
		public override function toString():String 
		{ 
			return formatToString("RightMouseEvent", "type", "bubbles", "cancelable", "eventPhase"); 
		}
 
		//в метод enable нужно передать объект stage
 
		public static function enable(stage:Stage):void {
			_stage = stage;
			ExternalInterface.addCallback("rightClick", _onRightClick);
		}
 
		//метод _onRightClick отыскивает непосредственно верхний объект под мышой, и приказывает объекту распространить событие
 
		private static function _onRightClick():void {
			var objs:Array = _stage.getObjectsUnderPoint(new Point(_stage.mouseX, _stage.mouseY));
			(objs[objs.length-1] as DisplayObject).dispatchEvent(new RightMouseEvent(RightMouseEvent.CLICK));
		}
 
	}
 
}
__________________
ranga

Старый 18.08.2010, 17:13
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 2  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Очевидно, вы забыли сделать событие всплывающим. Впрочем, по коду особо непонятно, как objN рассылают события.

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

блогер
Регистрация: Sep 2008
Адрес: Менск
Сообщений: 586
Записей в блоге: 1
Отправить сообщение для incvizitor с помощью Skype™
Цитата:
Очевидно, вы забыли сделать событие всплывающим.
Я не забыл, я просто не знаю что это значит.

Код AS3:
Впрочем, по коду особо непонятно, как objN рассылают события.
Ну как бы когда по сцене кликают правой клавишой мыши, самый верхний объект из тех что лежат на сцене распространяет событие. (a objN лежат на сцене)

Код AS3:
private static function _onRightClick():void {
			var objs:Array = _stage.getObjectsUnderPoint(new Point(_stage.mouseX, _stage.mouseY));
			(objs[objs.length-1] as DisplayObject).dispatchEvent(new RightMouseEvent(RightMouseEvent.CLICK));
		}
__________________
ranga

Старый 18.08.2010, 17:49
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 4  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
А вы уверены в том, что тот объект, от имени которого вы пытаетесь отправить событие, действительно один из тех objN? В вашем случае нужно в конструкторе отправляемого события указать true для бабблинга (второй аргумент).

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

блогер
Регистрация: Sep 2008
Адрес: Менск
Сообщений: 586
Записей в блоге: 1
Отправить сообщение для incvizitor с помощью Skype™
оооооо, баблинг зарулил) спасибо =)
__________________
ranga

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

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

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


 


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


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