zoukankan      html  css  js  c++  java
  • as3 页游中,新手指导中,屏蔽所有交互对象,但除了指定交互对象可用的方法【转http://blog.csdn.net/linjf520/article/details/9450945】

    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;
        }
    }
  • 相关阅读:
    [置顶] Android自定义控件大全
    与机房收费系统图的初步情结
    队列用链表实现(建立,插入新元素,删除元素,读取元素,全部删除,全部读出,判断是否为空,清空)
    数据结构 练习 16-动态规划
    windows和linux在建筑python集成开发环境IDE
    圆角盒演习(1)
    tortoise svn无法识别subversion check向下代码来解决
    CSS+DIV+JQuery实际的视频汇总
    【Android开发经验】Android举UI设计经验
    程序猿什么样的角色代表了这个号码?你想过这个问题?
  • 原文地址:https://www.cnblogs.com/602147629/p/4109102.html
Copyright © 2011-2022 走看看