2009-10-09 26 views
35

Cách tốt nhất để triển khai mã konami thành ứng dụng flex là gì?mã konami trong flex

Tôi muốn tạo một thành phần để thêm nó vào tất cả các proyects của tôi, chỉ để cho vui.

nhờ

UPDATE: Tôi đã thực hiện một thành phần đơn giản, nhờ ZaBlanc

<?xml version="1.0" encoding="utf-8"?> 
<mx:UIComponent xmlns:mx="http://www.adobe.com/2006/mxml" creationComplete="init()"> 
    <mx:Metadata> 
     [Event(name="success", type="flash.events.Event")] 
    </mx:Metadata> 
    <mx:Script> 
     <![CDATA[ 

      // up-up-down-down-left-right-left-right-B-A 
      public static const KONAMI_CODE:String = "UUDDLRLRBA"; 

      // signature 
      private var signatureKeySequence:String = ""; 

      private function init():void{ 
       systemManager.stage.addEventListener(KeyboardEvent.KEY_DOWN, onKeyDown); 
      } 

      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 66: //Keyboard.B only for AIR :/ 
         signatureKeySequence += "B"; 
         break; 

        case 65: //Keyboard.A only for AIR too :(
         signatureKeySequence += "A"; 
         break; 

        default: 
         signatureKeySequence = ""; 
         break; 
       } 

       // crop sequence 
       signatureKeySequence = signatureKeySequence.substr(0, KONAMI_CODE.length); 

       // check for konami code 
       if (signatureKeySequence == KONAMI_CODE) { 
        dispatchEvent(new Event("success")); 
        signatureKeySequence = ""; 
       } 

      } 
     ]]> 
    </mx:Script> 

</mx:UIComponent> 

để kiểm tra nó

<?xml version="1.0" encoding="utf-8"?> 
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical" xmlns:konamicode="konamicode.*"> 
    <mx:Script> 
     <![CDATA[ 
      import mx.controls.Alert; 
     ]]> 
    </mx:Script> 
    <konamicode:KonamiCodeCatch success="Alert.show('+30 lives!!!')" /> 
</mx:Application> 

Trả lời

26

Một máy nhà nước là niềm vui để viết, nhưng trong trường hợp này tôi muốn đi với một mẫu chữ ký. Tùy thuộc vào nơi bạn muốn đặt bộ xử lý (trên sân khấu của các thành phần), đây là một số mã mà nên làm việc, mặc dù bạn có lẽ có thể thắt chặt lại (và dĩ nhiên là tùy chỉnh nó cho nhu cầu cụ thể của bạn):

// 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! 
    } 
} 
+1

Chỉ cần thêm vào một số xử lý cho "B" và "A" và đây sẽ là vé. – fenomas

+0

cảm ơn điều này đã làm việc tuyệt vời, bệnh bài viết thành phần của tôi sau này cho công chúng quan tâm – sergiogx

+0

Rất tiếc, đúng rồi. Thiếu BA. :-) OK, bạn có được jist! Tôi sẽ thêm. – ZaBlanc

7

Bạn có thể sử dụng Casalib. Có các lớp học, KeyKeyCombo. Bạn có thể nghe theo số KeyComboEvent.SEQUENCE.

mẫu làm việc:

<?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

bất kỳ ý tưởng nào tại sao điều này có thể không hoạt động trên Flex 4? – Dan

+0

Phần kịch bản chỉ hoạt động khi có AS3 đơn giản. :) –

1
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); 
    } 
}