Flash actionscript 3 功能需要鼠标点击事件吗?

Posted

技术标签:

【中文标题】Flash actionscript 3 功能需要鼠标点击事件吗?【英文标题】:Flash actionscript 3 function requires mouse click event? 【发布时间】:2014-12-17 05:41:40 【问题描述】:

对于在 cs6 中运行的 flash actionscript 3,我遇到了一个问题,即函数只会在鼠标单击事件后运行,我不知道为什么会这样,我已经尝试了我能想到的一切,但没有网上好像没有类似的问题。

这是我正在创建的程序的基本模板,位于第一帧中。它的设计使得当您单击其中一个可能的按钮时,它会检查该按钮是否正确并带您进入下一帧

    stop();
    var buttons:Array=new Array(oport); //list of buttons
    var correct:String="oport"; //button name
    var gotoFrame:int=2;
    var win:String=null;

    const NEXT_FRAME:int=0;

    var removeOtherListeners:Function=function():void;

    addListeners();
    function addListeners():void 
        for (var i:int=0; i<buttons.length; i++) 
            buttons[i].addEventListener(MouseEvent.CLICK, checkButton);
        
    

    function removeListeners():void 
        for (var i:int=0; i<buttons.length; i++) 
            buttons[i].removeEventListener(MouseEvent.CLICK, checkButton);
        
    

    //checks button onclick and applies the functions above        
    function checkButton(e:MouseEvent):void    
        removeListeners();
        removeOtherListeners();
        removeOtherListeners=function():void;
        Mouse.show();
        if (e.currentTarget.name==win) 
            gotoAndStop("win");
         else if (e.currentTarget.name==correct) 
            if (gotoFrame<=0) 
                nextFrame();
             else 
                gotoAndStop(gotoFrame);
            
         else 
            gotoAndStop("lose");
        
    

这是为 cs4 设计的代码的第二帧,但它仍然可以工作。这是出现问题的框架,当我从第一帧输入时,我必须先点击屏幕才能开始输入。如果我在单击屏幕之前输入,则不会发生任何事情。

var lDown:Boolean = false;
var sDown:Boolean = false;
var dDown:Boolean = false;
stage.addEventListener(KeyboardEvent.KEY_DOWN, onKeyBoardDown);
function onKeyBoardDown(e:KeyboardEvent):void

        if (e.keyCode == KeyCodes.L)
        
                lDown = true;
        
        if (lDown == true)
        
                if (e.keyCode == KeyCodes.S)
                
                        sDown = true;
                
        
        if (sDown == true)
        
                if (e.keyCode == KeyCodes.D)
                
                        stage.removeEventListener(KeyboardEvent.KEY_DOWN, onKeyBoardDown);
                        gotoAndStop(5);
                
        


这是 KeyCodes 中引用的类

package  

    public class KeyCodes 
        public static const A:uint = 65;
        public static const B:uint = 66;
        public static const C:uint = 67;
        public static const D:uint = 68;
        public static const E:uint = 69;
        public static const F:uint = 70;
        public static const G:uint = 71;
        public static const H:uint = 72;
        public static const I:uint = 73;
        public static const J:uint = 74;
        public static const K:uint = 75;
        public static const L:uint = 76;
        public static const M:uint = 77;
        public static const N:uint = 78;
        public static const O:uint = 79;
        public static const P:uint = 80;
        public static const Q:uint = 81;
        public static const R:uint = 82;
        public static const S:uint = 83;
        public static const T:uint = 84;
        public static const U:uint = 85;
        public static const V:uint = 86;
        public static const W:uint = 87;
        public static const X:uint = 88;
        public static const Y:uint = 89;
        public static const Z:uint = 90;


        public function KeyCodes() 
            // constructor code
        

    


感谢您的任何回答或建议。

【问题讨论】:

【参考方案1】:

这很可能是由浏览器引起的焦点问题。作为安全预防措施,浏览器不会在不点击的情况下获得 Flash 焦点。解决方案是使用 javascript 让 SWF 专注于页面加载。

查看 Adob​​e 的解决方案 > http://helpx.adobe.com/flash/kb/give-keyboard-focus-embedded-movie.html

我建议您尝试将所有代码放入文档类中。这将消除任何 将代码分离到框架脚本中可能出现的错误。同时,让您的代码可重用。

【讨论】:

以上是关于Flash actionscript 3 功能需要鼠标点击事件吗?的主要内容,如果未能解决你的问题,请参考以下文章

堆叠动态文本字段 Flash/ActionScript 3

Flash窗口ActionScript功能

如何在 Flash 中使用 Actionscript 3.0 制作动态视频播放器

ActionScript 3 Actionscript 3 / Flash中的半色调效果

ActionScript 3 使用Flash / Actionscript 3进行3D翻转效果

在 actionscript flash 中创建登录