8

Rx.jsの学習を開始したいと考えており、ボールを転がし始めるためのクールな例を探しています。Rx.js でコナミコードを検出するにはどうすればよいですか?

キーを押すイベントのシーケンス (上、下、下、左、右、右、BA) を検出し、これが発生した場合に画像を表示したいと考えています。

4

2 に答える 2

7

これが私のバージョンです:

<html>
<head>
<script type="text/javascript" src="jquery-1.4.4.min.js"></script>
<script type="text/javascript" src="rx.js"></script>
<script type="text/javascript" src="rx.jQuery.js"></script>
</head>
<body>
<p id="result"></p>
<script type="text/javascript">
    $(function() {
        var konami = $(document).toObservable("keyup").Select(function(e) {
            return e.keyCode
        }).SkipWhile(function(k) {
            return (k != 38)
        }).BufferWithCount(
            10
        ).Where(function(ks) {
            return ks.length == 10 &&
                ks[0] == 38 && ks[1] == 38 &&
                ks[2] == 40 && ks[3] == 40 &&
                ks[4] == 37 && ks[5] == 39 &&
                ks[6] == 37 && ks[7] == 39 &&
                ks[8] == 66 && ks[9] == 65
        })

        var konamisub = konami.Subscribe(function(e) {
            $("#result").text("KONAMI!")
            $("#result").fadeIn().fadeOut()
        })
    })
</script>
</body>
</html>

キーアップイベントのストリームを、でキーコードのストリームに変換し、Selectユーザーがを押し上げるまでキープレスを無視し(キーコード38)、を使用してSkipWhile10回のキーストロークを収集しBufferWithCount、次にを使用してキーストロークをチェックしWhereます。

BufferWithTimeを使ってみましたが、キーストロークの途中で切れてしまう傾向があります。

誰かが改善を提案することができれば、私はそれらを聞いてみたいです。

于 2010-12-08T15:31:26.027 に答える
1

あなたが学習しているので、答えを台無しにしたくありませんが、問題を「キーアップイベントを最近押された最後の10文字のシーケンスに変換するにはどうすればよいか」と考えてみます. 、そのリストを「UUDDLRLRBA」の定数リストと比較します。(ヒント: Buffer、Where、Select、Take、Repeat はあなたの友達です)

于 2010-12-08T05:25:30.507 に答える