2009-04-15 61 views
15

Làm cách nào để xử lý các lần nhấn phím đồng thời trong Java?Làm cách nào để xử lý các lần nhấn phím đồng thời trong Java?

Tôi đang cố viết một trò chơi và cần xử lý nhiều lần nhấn cùng một lúc.

Khi tôi đang giữ phím (giả sử chuyển tiếp) và sau đó tôi giữ một phím khác (ví dụ, để rẽ trái), phím mới được phát hiện nhưng phím bấm cũ không bị phát hiện nữa.

+1

Thông tin chi tiết, xin vui lòng! Bạn đang cố làm gì vậy? –

+1

câu hỏi xấu, bạn cần nhiều chi tiết hơn: Tại sao lại là môi trường? Lung lay? AWT? Bạn có ý nghĩa gì bởi "xử lý"? –

Trả lời

15

Có một cách để theo dõi chính mình những phím nào hiện đang hoạt động.

Khi bạn nhận được một sự kiện quan trọngPress, hãy thêm khóa mới vào danh sách; khi bạn nhận được sự kiện keyReleased, hãy xóa khóa khỏi danh sách.

Sau đó, trong vòng lặp trò chơi, bạn có thể thực hiện các tác vụ dựa trên những gì trong danh sách các phím.

+0

Điều đó dường như không phải là hackish. (Rõ ràng có những vấn đề nhỏ liên quan đến tập trung - tôi đoán giả định tất cả lên trên lấy/mất tập trung.) –

+0

@MichaelMyers làm thế nào để bạn tài khoản cho phím lặp đi lặp lại, nếu tôi giữ một phím nó đi như một pryamid trên mặt của nó: a | a, a | a, a, a | a, a, a, a | a, a, a | a, a | a – KisnardOnline

+0

@JayAvon: Tôi nghĩ điều đó đáng để hỏi một câu hỏi mới. –

2

Nói chung, những gì bạn mô tả có thể đạt được bằng cách sử dụng bitmasks.

+3

-1 không có câu trả lời liên quan đến java và không giúp trả lời câu hỏi – Janusz

+0

Janusz có ý nghĩa gì? Nó có liên quan nhiều hơn. Vâng, nó không liên quan đến Java, nhưng điều đó không có nghĩa là nó hữu ích. –

3

Đây là một mẫu mã minh họa làm thế nào để thực hiện một hành động khi CTRL + Z được nhấn:

import java.awt.*; 
import java.awt.event.KeyEvent; 
import java.awt.event.KeyListener; 
class p4 extends Frame implements KeyListener 
{ 
    int i=17; 
    int j=90; 
    boolean s1=false; 
    boolean s2=false; 

    public p4() 
    { 
     Frame f=new Frame("Pad"); 

     f.setSize(400,400); 
     f.setLayout(null); 
     Label l=new Label(); 
     l.setBounds(34,34,88,88); 
     f.add(l); 

     f.setVisible(true); 
     f.addKeyListener(this); 
    } 

    public static void main(String arg[]){ 
     new p4(); 
    } 

    public void keyReleased(KeyEvent e) { 
     //System.out.println("re"+e.getKeyChar()); 

     if(i==e.getKeyCode()) 
     { 
      s1=false; 
     } 

     if(j==e.getKeyCode()) 
     { 
      s2=false; 
     } 
    } 

    public void keyTyped(KeyEvent e) { 
     //System.out.println("Ty"); 
    } 

    /** Handle the key pressed event from the text field. */ 
    public void keyPressed(KeyEvent e) { 
     System.out.println("pre"+e.getKeyCode()); 

     if(i==e.getKeyCode()) 
     { 
      s1=true; 
     } 

     if(j==e.getKeyCode()) 
     { 
      s2=true; 
     } 

     if(s1==true && s2==true) 
     { 
      System.out.println("EXIT NOW"); 
      System.exit(0); 
     } 
    } 

    /** Handle the key released event from the text field. */ 

} 
+0

Nhưng điều gì sẽ xảy ra nếu các phím khác phải là các phím không bổ trợ? Nói như thế, phím định hướng để di chuyển một sprite trên màn hình và không gian để bắn? Bạn muốn có thể chụp trong khi di chuyển – TheRealChx101

Các vấn đề liên quan