Flash ActionScript 3.0 KeyUp 和 KeyDown 方法错误
Flash ActionScript 3.0 KeysUp & KeysDown method error
具有以下游戏节目软件代码:
- 允许用户按下按钮并切换到特定的框架。
- 空格键设置为 "reset button" 将用户带回原始框架 1。
当前问题:空格键会将用户带回到上一帧(第 2、3 或 432 帧)。但是按空格键两次会恢复到第 1 帧。
不明白为什么。
stage.addEventListener(KeyboardEvent.KEY_DOWN, keysDown);
stage.addEventListener(KeyboardEvent.KEY_UP, keysUp);
var value:Number;
function keysUp(event:KeyboardEvent){
if(event.keyCode == Keyboard.SPACE) {
gotoAndStop(1);
}
if(event.keyCode == Keyboard.A) {
gotoAndStop(4);
stage.removeEventListener(KeyboardEvent.KEY_DOWN, keysDown);
}
if(event.keyCode == Keyboard.Z) {
gotoAndPlay(5);
stage.removeEventListener(KeyboardEvent.KEY_DOWN, keysDown);
}
if(event.keyCode == Keyboard.X) {
gotoAndPlay(66);
stage.removeEventListener(KeyboardEvent.KEY_DOWN, keysDown);
}
}
function keysDown(event:KeyboardEvent){
if(event.keyCode == Keyboard.SPACE) {
value = 1;
}
if(event.keyCode == Keyboard.LEFT) {
value = 2;
}
if(event.keyCode == Keyboard.RIGHT) {
value = 3;
}
if (value == 1){
gotoAndStop(1);
}
if (value == 2){
gotoAndStop(2);
stage.removeEventListener(KeyboardEvent.KEY_DOWN, keysDown);
}
if (value == 3){
gotoAndStop(3);
stage.removeEventListener(KeyboardEvent.KEY_DOWN, keysDown);
}
}
你真的不需要那么多监听器,如果你只想在按下键时设置一个值并在按下键时转到一个帧,那么你可以执行以下操作。
stage.addEventListener(KeyboardEvent.KEY_DOWN, keyDownHandler);
stage.addEventListener(KeyboardEvent.KEY_UP, keyUpHandler);
var value:Number;
stop();
function keyDownHandler(event:KeyboardEvent){
switch (event.keyCode) {
case Keyboard.SPACE:
value = 1;
break;
case Keyboard.LEFT:
value = 2;
break;
case Keyboard.RIGHT:
value = 3;
break;
}
}
function keyUpHandler(event:KeyboardEvent){
this.gotoAndStop(value);
}
如果你想在 keydown 上更改帧,那么你需要一个像 on enterframe 这样的常规事件侦听器,以避免连续触发 keyDown 事件来检查值的变化,如:
stage.addEventListener(KeyboardEvent.KEY_DOWN, keyDownHandler);
stage.addEventListener(Event.ENTER_FRAME, update);
var value:Number = 0;
stop();
function keyDownHandler(event:KeyboardEvent){
switch (event.keyCode) {
case Keyboard.SPACE:
value = 1;
break;
case Keyboard.LEFT:
value = 2;
break;
case Keyboard.RIGHT:
value = 3;
break;
}
}
function update(event){
this.gotoAndStop(value);
}
具有以下游戏节目软件代码:
- 允许用户按下按钮并切换到特定的框架。
- 空格键设置为 "reset button" 将用户带回原始框架 1。
当前问题:空格键会将用户带回到上一帧(第 2、3 或 432 帧)。但是按空格键两次会恢复到第 1 帧。
不明白为什么。
stage.addEventListener(KeyboardEvent.KEY_DOWN, keysDown);
stage.addEventListener(KeyboardEvent.KEY_UP, keysUp);
var value:Number;
function keysUp(event:KeyboardEvent){
if(event.keyCode == Keyboard.SPACE) {
gotoAndStop(1);
}
if(event.keyCode == Keyboard.A) {
gotoAndStop(4);
stage.removeEventListener(KeyboardEvent.KEY_DOWN, keysDown);
}
if(event.keyCode == Keyboard.Z) {
gotoAndPlay(5);
stage.removeEventListener(KeyboardEvent.KEY_DOWN, keysDown);
}
if(event.keyCode == Keyboard.X) {
gotoAndPlay(66);
stage.removeEventListener(KeyboardEvent.KEY_DOWN, keysDown);
}
}
function keysDown(event:KeyboardEvent){
if(event.keyCode == Keyboard.SPACE) {
value = 1;
}
if(event.keyCode == Keyboard.LEFT) {
value = 2;
}
if(event.keyCode == Keyboard.RIGHT) {
value = 3;
}
if (value == 1){
gotoAndStop(1);
}
if (value == 2){
gotoAndStop(2);
stage.removeEventListener(KeyboardEvent.KEY_DOWN, keysDown);
}
if (value == 3){
gotoAndStop(3);
stage.removeEventListener(KeyboardEvent.KEY_DOWN, keysDown);
}
}
你真的不需要那么多监听器,如果你只想在按下键时设置一个值并在按下键时转到一个帧,那么你可以执行以下操作。
stage.addEventListener(KeyboardEvent.KEY_DOWN, keyDownHandler);
stage.addEventListener(KeyboardEvent.KEY_UP, keyUpHandler);
var value:Number;
stop();
function keyDownHandler(event:KeyboardEvent){
switch (event.keyCode) {
case Keyboard.SPACE:
value = 1;
break;
case Keyboard.LEFT:
value = 2;
break;
case Keyboard.RIGHT:
value = 3;
break;
}
}
function keyUpHandler(event:KeyboardEvent){
this.gotoAndStop(value);
}
如果你想在 keydown 上更改帧,那么你需要一个像 on enterframe 这样的常规事件侦听器,以避免连续触发 keyDown 事件来检查值的变化,如:
stage.addEventListener(KeyboardEvent.KEY_DOWN, keyDownHandler);
stage.addEventListener(Event.ENTER_FRAME, update);
var value:Number = 0;
stop();
function keyDownHandler(event:KeyboardEvent){
switch (event.keyCode) {
case Keyboard.SPACE:
value = 1;
break;
case Keyboard.LEFT:
value = 2;
break;
case Keyboard.RIGHT:
value = 3;
break;
}
}
function update(event){
this.gotoAndStop(value);
}