実際には、フラッシュバグではなく、コンポーネントのバグです。スペースバーがラジオボタンを必要としない場合(私はそれは役に立たないと思います)、RadioButtonクラスを拡張する独自のMyRadioButtonを作成して無効にすることができます。これにより、スペースキー入力が無効になります。
package {
import flash.events.KeyboardEvent;
import fl.controls.RadioButton;
import flash.ui.Keyboard;
public class MyRadioButton extends RadioButton{
public function MyRadioButton() {
super();
}
override protected function keyUpHandler(event:KeyboardEvent):void {
if(event.keyCode != Keyboard.SPACE){
super.keyUpHandler(event);
}
}
override protected function keyDownHandler(event:KeyboardEvent):void {
if(event.keyCode != Keyboard.SPACE){
super.keyDownHandler(event);
}
}
}
}
クラスプロパティfl.controls.RadioButtonをライブラリ要素"RadioButton"からMyRadioButtonに変更する必要があります。(MyRadioButtonはflaに近いと思います)
------>編集
スペースバーを無効にしない別の解決策があります。今回は、ユーザーがスペースバーキーアップコードの前にanykeydownを実行すると、anykeydownの前にスペースバーキーアップが実行されます。ラジオボタンからフォーカスが削除されます。また、スペースバーのキー状態が下がっている場合など、他のソリューションを追加して、キーを下ろさないようにすることもできます。
package {
import flash.events.KeyboardEvent;
import fl.controls.RadioButton;
import flash.ui.Keyboard;
import flash.events.Event;
public class MyRadioButton extends RadioButton{
private var _isSpaceDown:Boolean = false;
public function MyRadioButton() {
super();
}
override protected function handleChange(event:Event):void {
if (_isSpaceDown) {
keyUpHandler(new KeyboardEvent(KeyboardEvent.KEY_UP, true, true, 0, Keyboard.SPACE));
setMouseState('up');
}
super.handleChange(event);
}
override protected function keyUpHandler(event:KeyboardEvent):void {
if(event.keyCode == Keyboard.SPACE){
if(_isSpaceDown){
_isSpaceDown = false;
}else{
return;
}
}
super.keyUpHandler(event);
}
override protected function keyDownHandler(event:KeyboardEvent):void {
if(event.keyCode == Keyboard.SPACE){
_isSpaceDown = true;
}else{
if(_isSpaceDown){
var e:KeyboardEvent = new KeyboardEvent(KeyboardEvent.KEY_DOWN);
e.keyCode = Keyboard.SPACE;
super.keyUpHandler(e);
_isSpaceDown = false;
}
}
super.keyDownHandler(event);
}
}
}