Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Actionscript 3 在AS3中使用键盘单击按钮_Actionscript 3_Flash Cs6 - Fatal编程技术网

Actionscript 3 在AS3中使用键盘单击按钮

Actionscript 3 在AS3中使用键盘单击按钮,actionscript-3,flash-cs6,Actionscript 3,Flash Cs6,我试图通过使用键盘上的“A”键点击按钮来实现这一点。我为这个按钮创建了两个框架,但是代码不起作用,尽管没有错误 我需要在我的主课上放点什么吗?有人能帮忙解决这个问题吗 package { import flash.display.MovieClip; import flash.events.MouseEvent; import flash.display.Sprite; import flash.display.Stage; import flash.

我试图通过使用键盘上的“A”键点击按钮来实现这一点。我为这个按钮创建了两个框架,但是代码不起作用,尽管没有错误

我需要在我的主课上放点什么吗?有人能帮忙解决这个问题吗

package  {

    import flash.display.MovieClip;
    import flash.events.MouseEvent;
    import flash.display.Sprite;
    import flash.display.Stage;
    import flash.events.Event;
    import flash.events.KeyboardEvent;
    import flash.ui.Keyboard;

    public class controlButton extends MovieClip {      

        public function controlButton() {
            // constructor code
            this.addEventListener(KeyboardEvent.KEY_DOWN,clickDown);
            this.addEventListener(KeyboardEvent.KEY_UP,clickUp);
        }

        public function clickDown(event:KeyboardEvent):void{

         // if the key is A
            if(event.charCode == 65){
                this.gotoAndStop(2);
            }
        }

        public function clickUp(event:KeyboardEvent):void{

         // if the key is A
            if(event.charCode == 65){
                this.gotoAndStop(1);
            }
        }

        public function changelabel(newLabel:String):void{

            this.label.text = newLabel;
        }
    }
}

您的按钮将永远不会收到任何键盘事件。您应该将事件侦听器直接添加到舞台。当然,你必须获得舞台的链接。无论如何:

package {

import flash.display.MovieClip;
import flash.events.MouseEvent;
import flash.display.Sprite;
import flash.display.Stage;
import flash.events.Event;
import flash.events.KeyboardEvent;
import flash.ui.Keyboard;


public class controlButton extends MovieClip {


    public function controlButton() {
        // constructor code
        addEventListener(Event.ADDED_TO_STAGE, onAddedToStage);
    }

    private function onAddedToStage (e:Event):void
    {
        removeEventListener(Event.ADDED_TO_STAGE, onAddedToStage);
                    //stage is no longer null here
        stage.addEventListener(KeyboardEvent.KEY_DOWN,clickDown);
        stage.addEventListener(KeyboardEvent.KEY_UP,clickUp);
    }


    public function clickDown(event:KeyboardEvent):void{

     // if the key is A
         if(event.charCode == 65){
            this.gotoAndStop(2);
        } 


    }

    public function clickUp(event:KeyboardEvent):void{

     // if the key is A
         if(event.charCode == 65){
                this.gotoAndStop(1);
             }
    }



    public function changelabel(newLabel:String):void{

        this.label.text = newLabel;
    }
}

}

如您所见,您应该在事件发生后立即将KeyboardEvent侦听器添加到舞台。ADDED_to_舞台将启动。

您的按钮将永远不会接收任何KeyboardEvent。您应该将事件侦听器直接添加到舞台。当然,你必须获得舞台的链接。无论如何:

package {

import flash.display.MovieClip;
import flash.events.MouseEvent;
import flash.display.Sprite;
import flash.display.Stage;
import flash.events.Event;
import flash.events.KeyboardEvent;
import flash.ui.Keyboard;


public class controlButton extends MovieClip {


    public function controlButton() {
        // constructor code
        addEventListener(Event.ADDED_TO_STAGE, onAddedToStage);
    }

    private function onAddedToStage (e:Event):void
    {
        removeEventListener(Event.ADDED_TO_STAGE, onAddedToStage);
                    //stage is no longer null here
        stage.addEventListener(KeyboardEvent.KEY_DOWN,clickDown);
        stage.addEventListener(KeyboardEvent.KEY_UP,clickUp);
    }


    public function clickDown(event:KeyboardEvent):void{

     // if the key is A
         if(event.charCode == 65){
            this.gotoAndStop(2);
        } 


    }

    public function clickUp(event:KeyboardEvent):void{

     // if the key is A
         if(event.charCode == 65){
                this.gotoAndStop(1);
             }
    }



    public function changelabel(newLabel:String):void{

        this.label.text = newLabel;
    }
}

}

如您所见,您应该在事件发生后立即将键盘事件侦听器添加到后台。ADDED_to_stage激发。

作为旁白,您应该避免使用实际的字符代码,就像避免为“单击”添加事件侦听器一样。相反,请使用
键盘
类的常量。虽然这些代码不太可能会改变,但这确实证明了它的未来性。(因此,不要使用
event.charCode==65
使用
event.charCode==Keyboard.A
)作为旁白,应该避免使用实际的字符代码,就像避免为“单击”添加事件侦听器一样。相反,请使用
键盘
类的常量。虽然这些代码不太可能会改变,但这确实证明了它的未来性。(因此,不要使用
event.charCode==65
而使用
event.charCode==Keyboard.A
)对不起,我对AS3完全陌生。当我实现您的代码时,我遇到了一个错误“访问AddedStatage上的未定义属性。我应该在哪里定义它?OMG,对不起,我忘记了命名函数。它只是私有函数(e:Event),现在它是AddedStatage上的私有函数(e:Event)我已经更正了答案,尝试再次复制它。我对AS3是全新的。当我实现您的代码时,我遇到了一个错误“访问未定义属性OnAddedStatage”。我应该在哪里定义它?天哪,对不起,我忘了给函数命名了。它只是一个私有函数(e:Event)现在它是一个附加的私有函数(e:Event)我已经更正了答案,再次尝试复制它