2

「長押し」に反応する必要があるインターフェースがあります。これは、キーが押されていた時間に基づいて、同じキーに対して 2 つの異なるアクションを意味します。

左カーソルを押す: アクション A

左カーソルを押し続ける: アクション B

うーん、思ったより難しくなってきました。主な問題は、キーを押したままにすると、Keyboard.KEY-DOWN と Keyboard.KEY-UP の両方が連続して起動することです。これは私には奇妙に見えますが、テキストを代入することを考えると理にかなっているかもしれません (テキストを入力してキーを押したままにすると、スペースが埋まり始めます)。

この問題に取り組もうとしていたとき、KEY-DOWN でカウンターを開始し、KEY-UP でリセットすることを考えました。次に、特定のしきい値に達した場合、イベントを発生させます。問題は、常に KEY-UP イベントが発生するため、カウンターがすぐにリセットされることです。

BigRoomSenocularなどのキーボード ポーリング クラスは認識していますが、同じイベントに基づいてステータスを設定しているため、問題は解決しません。

KEY-DOWNでタイマーを開始し、xミリ秒後にキーがまだ押されているかどうかを確認するタイマーを使用できますが、それはキーが常に押されていると仮定します。信頼できるとは思えません。

そして、これは私がアイデアを使い果たし始めているポイントです. 私が見落としたもっと簡単な方法はありますか?あることを願っています!

ありがとう、

ファン

4

4 に答える 4

1

これに対する解決策を見つけたかどうか疑問に思っています。私は同じ経験をしたことがなかったので、先に進んで、同じ結果が得られるかどうかを確認するために簡単なテストをまとめましたが、実際にはキーを手放したときにのみKEY_UPイベントが発生しました。

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" applicationComplete="app_applicationComplete()">

    <mx:Script>
        <![CDATA[

            private function app_applicationComplete():void
            {
                stage.addEventListener(KeyboardEvent.KEY_DOWN, app_keyDown);
                stage.addEventListener(KeyboardEvent.KEY_UP, app_keyUp);

                setFocus(); 
            }       

            private function app_keyDown(event:KeyboardEvent):void
            {
                trace("Down...");
            }

            private function app_keyUp(event:KeyboardEvent):void
            {
                trace("UP!");
            }

        ]]>
    </mx:Script>

</mx:Application>

私の結果は次のようになります-3回のタップ:

Down...
UP!
Down...
UP!
Down...
UP!

...そして「押し続けて放す」:

Down...
Down...
Down...
Down...
Down...
Down...
Down...
Down...
Down...
Down...
Down...
Down...
UP!

私が共有したいと思った。可能性は低いですが、キーボードがOSに「アップ」メッセージを送信するべきではないときに送信することも可能だと思います。しかし、これを機能させることができると仮定すると、おそらく、連続するKEY_DOWN通知の数を数え、KEY_UPを取得したときにカウンターをリセットして、キーをタップして離すのではなく、押し続けていることを推測できます。それが役に立てば幸い!

于 2009-01-23T21:26:43.153 に答える
1

申し訳ありませんが、戻ってくるまでに時間がかかりましたが、プロジェクトの途中で、これを詳しく調べる時間がありませんでした. 今、私はそのような問題がないことを発見しました。長い答えについては、以下をお読みください。

これは非常に特殊な状況でのみ発生するものであり、おそらく Adob​​e のせいではありません。

Ubuntu を実行している iMac があり、Windows XP を実行している仮想マシンで Flash を開発しています。この問題は仮想 XP でのみ発生し、Ubuntu (およびおそらく他のシステム) でネイティブに実行されている同じアプリケーションでは問題は発生しません。

また、VM を使用する際に他のキーボードの癖があるため、問題は VirtualBox のキーボード ドライバーにあると思います。

これを調べるために時間を割いてくれたすべての人に感謝します。これが他の人に役立つことを願っています!

ファン

于 2009-02-01T19:35:40.333 に答える
0

キーを押したときに KEY_UP が発火しますか。それはすっごく奇妙に聞こえます!Flex の試用期間が終了し、SDK のみを使用してコンパイルできる環境をセットアップしていないため、これを試すことができません。しかし、KEY_UP:s の欠落に関するこの actionscript.org フォーラム スレッドは、フラッシュ プレーヤーの設定の問題である可能性があることを示唆しているようです。それはあなたが経験している問題と同じではありませんが、彼らがあなたの問題を抱えていたら、彼らはきっと不平を言うでしょう...

于 2009-01-11T18:26:44.440 に答える
0

このhttp://www.futtock.co.uk/flash/smooth-movieclip-key-control-in-as3/投稿にはヒントが含まれている可能性があります。

ところで: あなたのシステムは、不要な key_up の直後に新しい key_down を生成しますか? その場合、キーボードが奇妙な設定になっていて、押し下げられているキーを自動リピートする可能性があります。推測ですが...

于 2009-01-11T18:31:37.550 に答える