konami code in flex

前端 未结 3 951
-上瘾入骨i
-上瘾入骨i 2021-02-01 14:51

What would be the best way to implement the konami code into a flex application?

I want to create a component to add it on all my proyects, just for fun.

thanks<

相关标签:
3条回答
  • 2021-02-01 15:31

    A state machine is fun to write, but in this case I'd go with a signature pattern. Depending on where you want to put the handler (on the stage of the component), here's some code that should work, though you can probably tighten it (and of course customize it to your specific need):

    // up-up-down-down-left-right-left-right-B-A
    public static const KONAMI_CODE:String = "UUDDLRLRBA";
    
    // signature
    private var signatureKeySequence:String = "";
    
    private function onKeyDown(event:KeyboardEvent):void {
        var keyCode:int = event.keyCode;
    
        switch (keyCode) {
            case Keyboard.UP:
                signatureKeySequence += "U";
                break;
    
            case Keyboard.DOWN:
                signatureKeySequence += "D";
                break;
    
            case Keyboard.LEFT:
                signatureKeySequence += "L";
                break;
    
            case Keyboard.RIGHT:
                signatureKeySequence += "R";
                break;
    
            case Keyboard.B:
                signatureKeySequence += "B";
                break;
    
            case Keyboard.A:
                signatureKeySequence += "A";
                break;
    
            default:
                signatureKeySequence = "";
                break;
        }
    
        // crop sequence
        signatureKeySequence = signatureKeySequence.substr(0, KONAMI_CODE.length);
    
        // check for konami code
        if (signatureKeySequence == KONAMI_CODE) {
            // 30 lives!
        }
    }
    
    0 讨论(0)
  • 2021-02-01 15:44
    var unlockCode:Array = new Array(38,38,40,40,37,39,37,39,66,65,13);
    
    var keyPressArray:Array = new Array();
    stage.addEventListener(KeyboardEvent.KEY_DOWN, checkUnlockCode);
    
    function checkUnlockCode(e:KeyboardEvent):void {
        if (keyPressArray.length >= unlockCode.length) {
            keyPressArray.splice(0,1);
            keyPressArray.push(e.keyCode.toString());
        } else {
            keyPressArray.push(e.keyCode.toString());
        }
        trace(keyPressArray);
        if (keyPressArray.toString() == unlockCode.toString()) {
            trace(unlockCode);
        }
    }
    
    0 讨论(0)
  • 2021-02-01 15:46

    You may use Casalib. There are classes, Key and KeyCombo. You may listen for KeyComboEvent.SEQUENCE.

    Working sample:

    <?xml version="1.0" encoding="utf-8"?>
    <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" initialize="init();">
        <mx:Script>
            <![CDATA[
                import mx.controls.Alert;
    
                import org.casalib.events.KeyComboEvent;
                import org.casalib.ui.Key;
                import org.casalib.ui.KeyCombo;
                import org.casalib.util.StageReference;
    
                private const KONAMI_CODE:KeyCombo = new KeyCombo([Keyboard.UP,Keyboard.UP,Keyboard.DOWN,Keyboard.DOWN,Keyboard.LEFT,Keyboard.RIGHT,Keyboard.LEFT,Keyboard.RIGHT,("B").charCodeAt(),("A").charCodeAt()]);
    
                private function init():void {
                    StageReference.setStage(this.systemManager.stage);
    
                    Key.getInstance().addKeyCombo(KONAMI_CODE);
                    Key.getInstance().addEventListener(KeyComboEvent.SEQUENCE,onKonami);
                }
    
                private function onKonami(evt:KeyComboEvent):void {
                    if (evt.keyCombo == KONAMI_CODE){
                        Alert.show("You know Konami code?","WOW");
                    }
                }
            ]]>
        </mx:Script>
    </mx:Application>
    
    0 讨论(0)
提交回复
热议问题