Actionscript 3 如何在AS3中添加键盘交互
我在这个应用程序中有16个不同的按钮,每个按钮播放不同的声音。目前我只能使用鼠标单击开始播放声音,然后再次单击停止,但现在我希望添加快捷键来访问这些曲目按钮,如按q键播放曲目1,按w键播放曲目2。有什么提示或提示,比如我该怎么做才能做到这一点?非常感谢Actionscript 3 如何在AS3中添加键盘交互,actionscript-3,flash,audio,intellij-idea,keyboard-events,Actionscript 3,Flash,Audio,Intellij Idea,Keyboard Events,我在这个应用程序中有16个不同的按钮,每个按钮播放不同的声音。目前我只能使用鼠标单击开始播放声音,然后再次单击停止,但现在我希望添加快捷键来访问这些曲目按钮,如按q键播放曲目1,按w键播放曲目2。有什么提示或提示,比如我该怎么做才能做到这一点?非常感谢 private var _ambientTracks:Array = [ambient1, ambient2, ambient3, ambient4]; private var _effectTracks:Array = [effect1, ef
private var _ambientTracks:Array = [ambient1, ambient2, ambient3, ambient4];
private var _effectTracks:Array = [effect1, effect2, effect3, effect4];
private var _melodyTracks:Array = [melody1, melody2, melody3, melody4];
private var _beatTracks:Array = [beat1, beat2, beat3, beat4];
//handle click on track invoke start / stop functions
private function onTrackClicked(event:MouseEvent):void {
var track:Sprite = event.currentTarget as Sprite;
var trackName:String = track.name;
if (trackName in _playingTracks) {
stopTrack(track);
delete _playingTracks[trackName];
} else {
startTrack(track);
_playingTracks[trackName] = trackName;
}
}
//starts track animation and dispatch event for TrackMixer
private function startTrack(track:Sprite):void {
Actuate.tween(track, 0.6, {alpha: 0.3}).reflect().repeat();
dispatchEvent(new ObjectEvent(START_TRACK, track.name, true));
}
//stop track animation and dispatch event for TrackMixer
private function stopTrack(track:Sprite):void {
Actuate.stop(track, "alpha");
track.alpha = 1;
dispatchEvent(new ObjectEvent(STOP_TRACK, track.name, true));
}
这是一个基本概念,与您试图实现的目标类似。您需要听一听按键,并使用特定的按键代码来处理正在按下的按键。如果您有很多按键命令,我建议使用开关盒
import flash.display.MovieClip;
import flash.events.KeyboardEvent;
var mc:MovieClip = new MovieClip();
mc.graphics.beginFill(0x000000);
mc.graphics.drawCircle(30,30,30);
mc.graphics.endFill();
stage.addEventListener(KeyboardEvent.KEY_UP,keyUp);
function keyUp(e:KeyboardEvent):void{
if(e.keyCode == 81){//q
addChild(mc);
}
if(e.keyCode == 87){//w
if(mc.stage){
removeChild(mc);
}
}
}
它仍然会使用类似的概念,但是您需要以某种方式切换相同的键来播放和停止。布尔变量很适合跟踪按键的状态
import flash.display.MovieClip;
import flash.events.KeyboardEvent;
//Code to create a simple black circle xpos: 30 ypos: 30 radius: 30
var mc: MovieClip = new MovieClip();
mc.graphics.beginFill(0x000000);
mc.graphics.drawCircle(30, 30, 30);
mc.graphics.endFill();
//Adding event listener to stage for a key up event
stage.addEventListener(KeyboardEvent.KEY_UP, keyUp);
/*
Creating a boolean value to track "on" or "off" for one key.
Default value for boolean is false.
*/
var bool: Boolean;
function keyUp(e: KeyboardEvent): void {
if (e.keyCode == 81) {
if (!bool) {
addChild(mc);
bool = true;
} else {
if (mc.stage) {
removeChild(mc);
bool = false;
}
}
}
}
如果key==q且bool==false,则将mc添加到stage并将bool设置为true。
下次调用此方法时,bool将为true,在这种情况下,else语句
将被解雇,因为布尔不是假的。将检查阶段以查看mc是否存在以避免错误,mc将从阶段中删除,bool将设置回false以满足if语句bool为false的条件。进行键盘交互非常简单,你到底坚持什么?看看我的答案,可能就是您要找的。@Cherniv,因为在本例中,我通过跟踪曲目名称来处理单击功能,如_playingtrack[trackName]=trackName;在数组中,但为了进行键盘交互,我必须制作16种不同的功能,对吗?@iggy嗨,我在那里看到了你的答案,但是如果我想制作像按下a触发声音,然后再次按下a停止声音这样的功能呢?@withinboy在这种情况下,你需要跟踪切换,这是一个简单的布尔值,例如:isSoundOn=true。您可以为每个键的切换创建一个包含255个条目的数组,当按下一个键时,将其设置为:toggles[e.keyCode]!=切换[e.keyCode];您好,谢谢您的概念,但是如果我想像按q键一样启动声音和动画,然后再按q键停止声音和动画,该怎么办?我可以使用同样的概念吗?谢谢,但是在这个例子中我使用的数组是:if trackName in _playingTracks{stopTracktrack;delete _playingTracks[trackName];}else{startTracktrack;_playingTracks[trackName]=trackName;}那么如果我想定义if.keyCode==81,然后播放曲目1环境1?我需要用1来定义1?或者我可以使用相同的方法_playingTracks[trackName]=trackName;同时检查钥匙码?谢谢你的耽搁,我去度假了。如果我记得你想按一个按钮进入下一个音轨?如果是这种情况,请输入某种计数器,然后按键时增加计数器,然后使用计数器播放数组值。e、 g.按下按钮,计数器增加到一个播放值[计数器],依此类推,直到达到数组长度并将计数器设置回0。