![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Вообщем развивая тему "Рассылка события" наткнулся на проблему.
Думаю сам писать много не буду, только суть проблемы... Вообщем, есть спрайт, в котором создаются кнопочки. Сам спрайт подписан на событие 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);
}
}
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);
}
}
__________________
Кто может делать - делает, кто не может делать - учит, кто не может учить - управляет... |
|
|||||
|
...
модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
|
Цитата:
|
|
|||||
|
если честно, я не понял что вы хотели сказать... кнопочки не подписаны на события мыши... я понимаю, что проще хранить массив ссылок на кнопки, и каждый раз при событии MOUSE_MOVE обходить массив и вызывать нужный метод, благодаря этому не нужна будет эта запутанная система событий, но мне просто хочется понять суть проблемы, как-то неприятно когда чего-то недопонимаешь...
__________________
Кто может делать - делает, кто не может делать - учит, кто не может учить - управляет... |
|
|||||
|
Регистрация: Oct 2007
Сообщений: 22
|
А можно узнать, в чём проблема подписывать на событие MOUSE_MOVE сами кнопочки?
|
|
|||||
|
Xelat, нет, мне хочется понять саму модель передачи событий, а в данном конкретном случае, как сделать так, чтобы "дети" были подписаны на событие "родителя", но при этом не искажали вложенных данных
__________________
Кто может делать - делает, кто не может делать - учит, кто не может учить - управляет... |
![]() |
![]() |
Часовой пояс GMT +4, время: 08:02. |
|
|
« Предыдущая тема | Следующая тема » |
|
|