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, false, 1, 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监控到。咋办呢--直接上源码吧 这也是在一个外文的网站上看到的一个代码哪个网址不记得了不好意思。

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

资源包括 PDF文档 文档中对STARLING以及相关框架的介绍以及代码实例 内容包括AS3 项目源文件两个 包含PDF中提到的例子 以及运行效果SWF10个 在Stage3D出现之前,Flash3D引擎( Papervision3D, Away3D,…)都是软解 CPU是通用处理器,没有为渲染三角形而优化过 Stage3D是一个新的Flash API。它专门用于实时3D渲染。用Stage3D,你可以让Flash充分利用用户计算机的GPU硬件加速能力。 GPU渲染过程比软件渲染模式快多了。GPU被设计用来干专门的工作:计算顶点和渲染三角形,如此而已。因为GPU硬件被用来处理专门的工作,所以硬件加速3D渲染就非常高效! Stage3D的API相对仍较为繁琐 • 比如绘制一个图形,在传统Stage中使用绘图API可能只需要几行代码,而Stage3D实现同样的图形显示却需要几十行或上百行代码 Starling的英文原意是叫做“八哥”的小鸟。 不过在Flash领域,Starling是一个ActionScript类库,它模仿了传统的 Flash显示列表。然而,和传统的显示对象不同,Starling对象完全存在于Stage3D环境。这意味着,所有的显示对象都直接由GPU渲染,这 会带来非常明显的性能提升。 Starling并不是直接1:1的复制Flash API。所有的类都针对GPU模式进行了精简和优化。Starling向开发者隐藏了Stage3D的内部细节,但如果您想创建自定义显示对象,也可以很容易访问到它们。 StarlingMVC是一个为使用Starling来开发游戏的MVC框架。这个框架的特性方面,很像Swiz和RobotLegs。特性列表如下: • 依赖注入(DI)/控制反转(IOC) • 视图代理(View Mediation) • 事件捕获(Event Handling) • 非侵入性框架 • 配置简单 • 容易扩展 • 包含了很多对您的游戏有帮助的工具 StarlingMVC 框架是基于 Apache License 2.0协议开源的. 以上为部分PDF内容
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值