KeyboardEvent работает только после MouseEvent

#actionscript-3 #mouseevent #flash-cs5 #keyboard-events

#actionscript-3 #mouseevent #flash-cs5 #клавиатура-события

Вопрос:

Хорошо, итак, я создаю презентацию слайд-шоу во Flash CS5. Код очень простой, однако он работает не так, как предполагалось. Предполагается, что переход к следующему кадру происходит, если я нажимаю кнопку или нажимаю стрелку вверх / вправо на клавиатуре. Однако клавиатура работает только после того, как я нажал кнопку один раз.

мой код:

 import flash.events.MouseEvent;
import flash.events.KeyboardEvent;

slides.stop();

addEventListener(KeyboardEvent.KEY_DOWN, keyD);
FB.addEventListener(MouseEvent.CLICK, nextSld);
BB.addEventListener(MouseEvent.CLICK, prevSld);

function keyD(evt){
    var k = evt.keyCode;
    if(k==37||k==38){ 
        prevSld(evt);
    }
    if(k==39||k==40){ 
        nextSld(evt);
    }
}
function nextSld(evt){
    slides.nextFrame();
    }
function prevSld(evt){
    slides.prevFrame(); 
}
  

slides — это видеоролик, где я сохранил все свои слайды (О, кстати, я знаю, что мои настройки не самые лучшие, но я бы не тратил на это много времени, так как это для класса религии). FB — это кнопка переадресации, и вы можете догадаться, что такое BB…

Теперь я бы просто убедился, что моей проблемы здесь нет, и, возможно, кто-нибудь сможет указать на проблему, хотя это, вероятно, не подходит для этой платы.

Комментарии:

1. присутствует ли эта проблема в автономном flashplayer?

2. Вы уверены, что флэш-ролик имеет фокус? Он не может реагировать на события клавиатуры, если у него нет фокуса, обычно это означает щелчок по flash-фильму в браузере. Попробуйте щелкнуть в пустой области SWF-файла, а затем с помощью клавиатуры.

Ответ №1:

измените addEventListener(KeyboardEvent.KEY_DOWN, keyD); на stage.addEventListener(KeyboardEvent.KEY_DOWN, keyD);

Комментарии:

1. Ну, это немного смущает. Я думал, что сделал это, но теперь это сработало. Спасибо.

2. кстати, есть flash.ui.Keyboard класс с константами keycode, очень полезный: function keyD(evt:KeyboardEvent):void{ if(evt.keyCode == Keyboard.DOWN || evt.keyCode == Keyboard.LEFT)//and so on

Ответ №2:

Кажется, ваш фильм не в фокусе, поэтому вам нужно щелкнуть мышью по фильму, прежде чем он захватит события клавиатуры.

Комментарии:

1. Ну, я попробовал это, но клавиатура не будет реагировать, если я специально не нажму одну из кнопок. Если я просто нажимаю на фильм, ничего не происходит.