加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

flash 原生UI 与 starling 鼠标事件冲突解决办法

发布时间:2020-12-15 17:32:11 所属栏目:百科 来源:网络整理
导读:package com.util.core.commands{import com.game.ui.main.WindowState;import flash.display.Stage;import flash.events.MouseEvent;/** * 作用于判断是否点击到原生的FLASH UI 界面 如果是的话就不向starling 发送 点击事件 如果不是的话则继续发送事件 *

package com.util.core.commands
{
	import com.game.ui.main.WindowState;
	
	import flash.display.Stage;
	import flash.events.MouseEvent;

	/**
	 * 作用于判断是否点击到原生的FLASH UI 界面 如果是的话就不向starling 发送 点击事件 如果不是的话则继续发送事件
	 * @author Administrator
	 * 
	 */
	public class StarlingEventShield
	{
		public function StarlingEventShield()
		{
		}
		
		static public var mouseDown:Boolean = false; 
		static public var mouseDrag:Boolean = false; 
		
		static private var stage:Stage;
		
		static public function activate( stage:Stage ) : void
		{
			if ( StarlingEventShield.stage ) return; 
			StarlingEventShield.stage = stage;
			stage.addEventListener( MouseEvent.MOUSE_DOWN,onStage_MouseDown,false,1,true );
			stage.addEventListener( MouseEvent.MOUSE_UP,onStage_MouseUp,true );
		}
		
		static private function onStage_MouseDown(e:MouseEvent):void
		{
			if(WindowState.windows == WindowState.MFightWindow)
			{
				if(e.target == MClient.client)
				{
					mouseDown = true;
				}else
				if ( e.target != stage ) e.stopImmediatePropagation();
				else mouseDown = true; 
			}
		}
		
		static private function onStage_MouseMove(e:MouseEvent):void
		{
			if ( mouseDown ) mouseDrag = true;
			if ( e.target != stage && !mouseDrag ) e.stopImmediatePropagation();
		}
		
		static private function onStage_MouseUp(e:MouseEvent):void
		{
			if(WindowState.windows == WindowState.MFightWindow)
			{
				if ( e.target != stage && !mouseDrag ) e.stopImmediatePropagation();
				mouseDown = mouseDrag = false;
			}
		}
		
		static public function deactivate() : void
		{
			if ( !stage ) return;
			stage.removeEventListener( MouseEvent.MOUSE_DOWN,onStage_MouseDown );
			stage.removeEventListener( MouseEvent.MOUSE_UP,onStage_MouseUp );
			mouseDown = mouseDrag = false;
			stage = null;
		}
	}
}

在项目中出现过当前问题本来以为在程序里面用事件截断处理就可以不会出现事件渗透到starling,而且在pc上是可以实现当前的目标。

但是

真正在移动设备上使用的时候就不是那么简单的了。事件还是能够被starling监控到。咋办呢--直接上源码吧 这也是在一个外文的网站上看到的一个代码哪个网址不记得了不好意思。

希望能够帮助到其他人吧。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读