Показать сообщение отдельно
Старый 29.10.2010, 11:40
Obi вне форума Посмотреть профиль Отправить личное сообщение для Obi Найти все сообщения от Obi
  № 6  
Ответить с цитированием
Obi
 
Аватар для Obi

Регистрация: Nov 2007
Адрес: Moscow
Сообщений: 566
Ваши объекты и не будут диспатчить мышиные события, если перекрыты InteractiveObject'ами с включенным mouseEnabled. Предполагалось, что по MOUSE_WHEEL у контейнера, где находятся все нужные объекты, вы будете искать детей, находящихся под мышкой, используя метод getObjectsUnderPoint. Результат будет тот-же, как если бы у вас все объекты диспатчили MOUSE_WHEEL

Хотя у меня большие сомнения, что решение, которое вызвало необходимость таких извращений, правильное. Опишите ситуацию в целом, может что-то умное подскажем

Добавлено через 4 минуты
Цитата:
Сообщение от BornTOFree Посмотреть сообщение
getObjectUnderPoint работает. Но я не могу понять, он работает когда я щелкаю по объектам, а когда использую MOUSE_OVER то события до объектов опять же не доходят. Вот пример и код:

Код AS3:
package {
 
	import flash.display.Sprite;
	import flash.events.MouseEvent;
	import flash.geom.Point;
	import flash.text.TextField;
	import flash.ui.Mouse;
 
	[SWF(backgroundColor="0xFFFFFF", width="800", height="600", frameRate="30")]
 
	public class Main extends Sprite {
 
		private var txt:TextField
		private var container:Sprite
 
 
		public function Main() {
			init();
		}
 
		private function init():void {
			txt = new TextField();
 
			container = new Sprite();
			addChild(container)
 
			for(var i:uint = 0; i<3; i++){
 
				var sp:Sprite = new Sprite();
				container.addChild(sp);
 
				sp.name = "button: "+i
 
				sp.graphics.beginFill(0x000000, 0.7);
				sp.graphics.drawRect(100, 100, 100, 50);
				sp.graphics.endFill();
				sp.y = Number(sp.y + sp.height+10)*i;
 
				addEventListener(MouseEvent.MOUSE_OVER, mouseOver);
 
				addEventListener(MouseEvent.CLICK, clickListener);
 
			}
 
			var bg:Sprite = new Sprite();
			addChild(bg);
			bg.addChild(txt);
 
			bg.name = "BG"
 
			bg.graphics.beginFill(0xF5003D,0.5);
			bg.graphics.drawRect(150, 100, 100, 170);
			bg.graphics.endFill();
			bg.addEventListener(MouseEvent.MOUSE_WHEEL, mouseWheel);
 
		}
 
		private function clickListener (e:MouseEvent):void {
			var p:Point = new Point(e.stageX, e.stageY);
 
			var arr:Array = container.getObjectsUnderPoint(p);
 
			checkInfo(arr);
 
		}
 
		private function checkInfo (arr:Array):void {			
			var info:String;
			for (var i:uint = arr.length; i--; ){
				info = arr[i].name + " ";
				arr[i].alpha = 0.5
			}
 
			trace(info);
		}
 
		private function mouseOver(e:MouseEvent):void {
 
			var p:Point = new Point(e.stageX, e.stageY);
 
			var arr:Array = container.getObjectsUnderPoint(p);
 
			checkInfo(arr);
		}
 
		private function mouseWheel(e:MouseEvent):void {
 
			txt.text = "wheel"
 
		}
 
	}
}

Код AS3:
private function mouseOver(e:MouseEvent):void {
 
var p:Point = new Point(container.mouseX, container.mouseY);
 
var arr:Array = container.getObjectsUnderPoint(p);
 
checkInfo(arr);
}
__________________
#flasher@irc.trg.ru:6667


Последний раз редактировалось Obi; 29.10.2010 в 11:43.