as3 页游中,新手指导中,屏蔽所有交互对象,但除了指定交互对象可用的方法
来源:互联网 发布:2012sql维护计划 编辑:程序博客网 时间:2024/05/17 21:07
玩过几款页游,他们处理新手指导的过程中;
会有一些强制玩家必须点击指导流程所激活的按钮,才可以继续游戏的方法,其实有那么几种:
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 页游中,新手指导中,屏蔽所有交互对象,但除了指定交互对象可用的方法
- as3遍历对象所有属性的方法
- as3遍历对象所有属性的方法
- 两个对象之间很好的交互方法!
- java对象的交互
- java中对象之间的交互
- as3中删除对象的方法
- 在网页中引用DWG控件,交互绘图,和响应鼠标点击对象的方法
- 在网页中引用DWG控件,交互绘图,和响应鼠标点击对象的方法
- 类间对象交互的实现方法3则
- VR中对带有约束的物理对象的交互
- 在C++中与QML对象交互
- iOS 中JavaScript交互 Document对象详解
- as3中对象的比较
- Flex与Flash的交互_2(深层对象交互示例)
- AS3 与 JavaScript 的交互
- js与as3的交互
- AS3与PHP的交互
- PHP关于时区设置的一个问题的解决
- PHP页面跳转几种实现方法
- android 代码赋值DP单位
- 10种”女朋友”的英语表达
- 【翻译】State of Peer-to-Peer Communication across NAT(rfc5128中文)
- as3 页游中,新手指导中,屏蔽所有交互对象,但除了指定交互对象可用的方法
- hdu 3635 并查集
- 技术团队管理
- Oracle 定时任务时间写法
- .Net开发相关的一些学习相关
- Rotate List
- STM32串口通信中遇到有规律的乱码
- 代码转换!将自己的123_GB18030.xml转换为UTF-8文件
- The End-of-Line Story