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

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

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

Регистрация: Dec 2005
Адрес: мухосранск
Сообщений: 661
Отправить сообщение для divinus с помощью ICQ
По умолчанию откуда класс "MouseEvent" берет свойство localX?

Вообщем развивая тему "Рассылка события" наткнулся на проблему.
Думаю сам писать много не буду, только суть проблемы...
Вообщем, есть спрайт, в котором создаются кнопочки.
Сам спрайт подписан на событие MOUSE_MOVE, и в обработчике этого события он рассылает кастомное событие которое в свою очередь содержит localX как вложенное свойство.
Кнопочки подписаны на это кастомное событие и просто трейсят полученное свойство (localX).
Теперь внимание, вопрос:
Почему при наведении на кнопочки localX принимает значения относительно кнопки на которую мы навели, а при наведении на сам спрайт localX принимает "нормальные значения" относительно начала коорд. спрайта.
Я не в полной мере понимаю модель событий в AS3 и поэтому мне не понятно, почему localX вообще берется с кнопочек, когда они не подписаны на события MOUSE...

главный код:
Код:
import flash.display.*;
import simpleButton;
import updateMenuEvent;
import flash.events.MouseEvent;
////////////////////
public class macMenu extends Sprite{
	var canvas:Sprite = null;
	var temp_button:simpleButton = null;
	var temp_menu_el:DisplayObject = null;
	public function macMenu(){	
		addEventListener(MouseEvent.MOUSE_MOVE, updateMenu);
		canvas = new Sprite();
		canvas.graphics.lineStyle(1, 0xAAAAAA, 100);
		canvas.graphics.beginFill(0xDDDDDD, 100);
		canvas.graphics.drawRect(0, 0, 700, 150);
		canvas.graphics.endFill();
		this.addChild(canvas);
		for(var i=0; i<10; ++i){
			temp_button = new simpleButton();
			temp_button.set_parent_object(this);
			temp_menu_el = canvas.addChild(temp_button);	
			temp_menu_el.x = i*(canvas.width/10);
			temp_menu_el.y = (canvas.height-temp_menu_el.height)/2;		
			}			
		}
		private function updateMenu(evt:MouseEvent){
			var mouseUpdateEvent:updateMenuEvent = new updateMenuEvent(evt.localX);
			dispatchEvent(mouseUpdateEvent);
		}
	}
код класса simpleButton:
Код:
import flash.display.*;
import updateMenuEvent;
public class simpleButton extends SimpleButton {
	private var upColor:uint=0xFFCC00;
	private var overColor:uint=0xCCFF00;
	private var downColor:uint=0x00CCFF;
	private var size:uint=50;
	public var parentObject:DisplayObject = null;
	public function simpleButton() {
		downState=new ButtonDisplayState(downColor,size);
		overState=new ButtonDisplayState(overColor,size);
		upState=new ButtonDisplayState(upColor,size);
		hitTestState=new ButtonDisplayState(upColor,size);
		useHandCursor=true;
	}
	public function updateButtonState(evt:updateMenuEvent){
		trace(evt.x);
	}
	public function set_parent_object(target:DisplayObject){
		this.parentObject = target;
                this.parentObject.addEventListener(updateMenuEvent.UPDATE_MENU, this.updateButtonState);
       }
}
__________________
Кто может делать - делает, кто не может делать - учит, кто не может учить - управляет...

Старый 17.03.2008, 21:34
udaaff вне форума Посмотреть профиль Отправить личное сообщение для udaaff Найти все сообщения от udaaff
  № 2  
Ответить с цитированием
udaaff
...

модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
Цитата:
почему localX вообще берется с кнопочек, когда они не подписаны на события MOUSE...
Потому-что событие адресовано кнопкам, а обработчик ваш на фазе всплытия, в данном случае, срабатывает.

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

Регистрация: Dec 2005
Адрес: мухосранск
Сообщений: 661
Отправить сообщение для divinus с помощью ICQ
если честно, я не понял что вы хотели сказать... кнопочки не подписаны на события мыши... я понимаю, что проще хранить массив ссылок на кнопки, и каждый раз при событии MOUSE_MOVE обходить массив и вызывать нужный метод, благодаря этому не нужна будет эта запутанная система событий, но мне просто хочется понять суть проблемы, как-то неприятно когда чего-то недопонимаешь...
__________________
Кто может делать - делает, кто не может делать - учит, кто не может учить - управляет...

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

Регистрация: Oct 2007
Сообщений: 22
А можно узнать, в чём проблема подписывать на событие MOUSE_MOVE сами кнопочки?

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

Регистрация: Dec 2005
Адрес: мухосранск
Сообщений: 661
Отправить сообщение для divinus с помощью ICQ
Xelat, нет, мне хочется понять саму модель передачи событий, а в данном конкретном случае, как сделать так, чтобы "дети" были подписаны на событие "родителя", но при этом не искажали вложенных данных
__________________
Кто может делать - делает, кто не может делать - учит, кто не может учить - управляет...

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

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

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


 


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


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