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;
        }
    }
  • 相关阅读:
    bat脚本运行py文件失败(一闪而过)
    python 将日期戳(五位数时间)转换为标准时间
    Pandas 如何通过获取双(多)重索引获取指定行DataFrame数据
    Pandas 横向合并DataFrame数据
    Pandas 删除指定列中为NaN的行
    git 解决push报错:[rejected] master -> master (fetch first) error: failed to push some refs to
    pandas删除包含指定内容的行
    python项目环境的导出、导入
    pandas 修改列名
    Javascript 异步编程的4种方法
  • 原文地址:https://www.cnblogs.com/602147629/p/4109102.html
Copyright © 2011-2022 走看看