as3 页游中,新手指导中,屏蔽所有交互对象,但除了指定交互对象可用的方法
2013-07-24 15:12
302 查看
玩过几款页游,他们处理新手指导的过程中;
会有一些强制玩家必须点击指导流程所激活的按钮,才可以继续游戏的方法,其实有那么几种:
1)、有些将黑色半透明的显示对象放最顶上,只露出要操作按钮的矩形位置可操作;
2)、有些是将黑色半透明的显示对象放最顶,所有都遮挡;然后将指定的操作对象放到最顶上,操作后,再放回原来的层;
3)、就是目前我推荐的方式:就是,通过,屏蔽掉所有交互对象的,捕获阶段的事件;除了:指定的交互象对;
源码如下:
外部调用;
会有一些强制玩家必须点击指导流程所激活的按钮,才可以继续游戏的方法,其实有那么几种:
1)、有些将黑色半透明的显示对象放最顶上,只露出要操作按钮的矩形位置可操作;
2)、有些是将黑色半透明的显示对象放最顶,所有都遮挡;然后将指定的操作对象放到最顶上,操作后,再放回原来的层;
3)、就是目前我推荐的方式:就是,通过,屏蔽掉所有交互对象的,捕获阶段的事件;除了:指定的交互象对;
源码如下:
package { import flash.display.InteractiveObject; import flash.display.Stage; import flash.events.MouseEvent; /** * 新手指导管理器 * @author jave.lin * @date 2013-7-24 */ public class GuideManager{ private static var stage:Stage; /**设置舞台*/ public static function setStage(stage:Stage):void{ GuideManager.stage = stage; } /**锁定全局*/ public static function lockAll():void{ if(!stage) throw new Error("GuideManager未设置stage"); stage.addEventListener(MouseEvent.CLICK, onLockAll, true, int.MAX_VALUE); stage.addEventListener(MouseEvent.MOUSE_DOWN, onLockAll, true, int.MAX_VALUE); stage.addEventListener(MouseEvent.MOUSE_UP, onLockAll, true, int.MAX_VALUE); stage.addEventListener(MouseEvent.MOUSE_MOVE, onLockAll, true, int.MAX_VALUE); stage.addEventListener(MouseEvent.MOUSE_OVER, onLockAll, true, int.MAX_VALUE); stage.addEventListener(MouseEvent.MOUSE_OUT, onLockAll, true, int.MAX_VALUE); stage.addEventListener(MouseEvent.MOUSE_WHEEL, onLockAll, true, int.MAX_VALUE); } /**解除锁定全局*/ public static function unLockAll():void{ stage.removeEventListener(MouseEvent.CLICK, onLockAll, true); stage.removeEventListener(MouseEvent.MOUSE_DOWN, onLockAll, true); stage.removeEventListener(MouseEvent.MOUSE_UP, onLockAll, true); stage.removeEventListener(MouseEvent.MOUSE_MOVE, onLockAll, true); stage.removeEventListener(MouseEvent.MOUSE_OVER, onLockAll, true); stage.removeEventListener(MouseEvent.MOUSE_OUT, onLockAll, true); stage.removeEventListener(MouseEvent.MOUSE_WHEEL, onLockAll, true); } private static function onLockAll(e:MouseEvent):void{ e.preventDefault(); e.stopImmediatePropagation(); e.stopPropagation(); } /**当前激活,可以控制的对象*/ public static var curActivedObj:InteractiveObject; /** * 屏蔽掉所有鼠标操作,但除了指定的obj交互对象 * (如果需要屏蔽键盘操作也但样加上对所有键盘事件的处理) * */ public static function lockAllButThisOne(obj:InteractiveObject):void{ unLock(); curActivedObj = obj; stage.addEventListener(MouseEvent.CLICK, checkEvent, true, int.MAX_VALUE); stage.addEventListener(MouseEvent.MOUSE_DOWN, checkEvent, true, int.MAX_VALUE); stagej.addEventListener(MouseEvent.MOUSE_UP, checkEvent, true, int.MAX_VALUE); stage.addEventListener(MouseEvent.MOUSE_MOVE, checkEvent, true, int.MAX_VALUE); stage.addEventListener(MouseEvent.MOUSE_OVER, checkEvent, true, int.MAX_VALUE); stage.addEventListener(MouseEvent.MOUSE_OUT, checkEvent, true, int.MAX_VALUE); stage.addEventListener(MouseEvent.MOUSE_WHEEL, checkEvent, true, int.MAX_VALUE); } /**解除屏蔽*/ public static function unLock():void{ if(stage){ stage.removeEventListener(MouseEvent.CLICK, checkEvent, true); stage.removeEventListener(MouseEvent.MOUSE_DOWN, checkEvent, true); stage.removeEventListener(MouseEvent.MOUSE_UP, checkEvent, true); stage.removeEventListener(MouseEvent.MOUSE_MOVE, checkEvent, true); stage.removeEventListener(MouseEvent.MOUSE_OVER, checkEvent, true); stage.removeEventListener(MouseEvent.MOUSE_OUT, checkEvent, true); stage.removeEventListener(MouseEvent.MOUSE_WHEEL, checkEvent, true); } } /**检查、滤过交互对象的事件*/ private static function checkEvent(e:MouseEvent):void{ if(e.target != curActivedObj){//所有鼠标触发的事件都屏蔽 e.preventDefault(); e.stopImmediatePropagation(); e.stopPropagation(); } } } }
外部调用;
import flash.display.Sprite; class Main extends Sprite{ private var btnVec:Vector.<Sprite>; public function Main(){ btnVec = new Vector.<Sprite>(); for (var i:int = 0; i < 10; i++){ var btn:Sprite = getBtn(); btn.x = 100; btn.y = 100 + (30 * i); addChild(btn); } //这里我只想第5个按钮可用,其它都不可用即可 GuideManager.setStage(stage);//这里只需要在游戏初始化时setStage一次即可 GuideManager.lockAllButThisOne(btnVec[4]); // //解除屏蔽 // GuideManager.unLock(); } private function getBtn():Sprite{ var result:Sprite = new Sprite(); result.graphics.beginFill(uint(Math.random() * uint.MAX_VALUE)); result.graphics.drawRect(0, 0, 100, 30); result.graphics.endFill(); return result; } }
相关文章推荐
- as3 页游中,新手指导中,屏蔽所有交互对象,但除了指定交互对象可用的方法【转http://blog.csdn.net/linjf520/article/details/9450945】
- as3遍历对象所有属性的方法
- 通过Object.prototype扩充功能,增加对所有对象都可用的方法
- sqlserver查找除了指定字段外的其它所有字段的方法
- as3遍历对象所有属性的方法
- SQL SERVER 2005中查询指定节点及其所有子节点的方法
- python查找指定目录下所有文件,以及改文件名的方法
- java基础之File对象中的FilenameFilter文件过滤以及递归列出指定文件夹路径下的所有文件和所有文件夹
- JavaScript字符串对象charAt方法入门实例(用于取得指定位置的字符)
- 学习笔记------------------对Action中所有方法进行输入校验和对指定方法输入校验(手工编写代码和xml方式)
- js获取对象的所有属性和方法
- C++程序设计实践指导1.8求指定范围内的所有素数改写要求实现
- 递归 / 迭代两种方法实现查找指定目录下所有文件
- lookup第一篇:如何在salesforce增强lookup搜索功能,实现搜索所有可用记录和实现搜索同一对象下的all field
- Java之所有对象的公用方法>10.Always override toString
- Map.containsKey/Map.containsValue方法——判断Map集合对象中是否包含指定的键名
- 一种屏蔽所有系统热键的方法
- Effective Java:对于所有对象都通用的方法
- Effective Java - 对于所有对象都通用的方法 - 谨慎地覆盖 clone
- 原生javascript实现获取指定元素下所有后代元素的方法