Java KeyListenerクラスにはダブルキープレスのオプションがありません。したがって、複数の配列とarraylistsを使用して自分自身を作成しようとしました。ここで javaの配列と配列リストを使用するキーリスナーのダブルクリック機能は、すべてダブルクリックとしてカウントされます。
私は括弧のいくつかは奇妙な場所にある場合はごめんなさいreleventコードprivate ArrayList<Integer> ButtonsPressedChar = new ArrayList<Integer>();
private ArrayList<Long> ButtonsPressedTimes = new ArrayList<Long>();
private int[] PossiblePresses = new int[222];
private ArrayList<Integer> DoublePresses = new ArrayList<Integer>();
private ArrayList<Integer> ToBeRemovedChars = new ArrayList<Integer>();
private ArrayList<Integer> ToBeRemovedTimes = new ArrayList<Integer>();
private Long LastTimeForDoublePress;
private Long NowTime;
private int PositionTime;
private int PositionChar;
public void DetectDoubleKeyPresses(){
PositionTime = 0;
PositionChar = 0;
NowTime = System.currentTimeMillis();
for(int temp : PossiblePresses){
PossiblePresses[temp] = 0;
}
for(Long temp: ButtonsPressedTimes){
if(temp - NowTime >= 300){
ButtonsPressedChar.remove(PositionTime);
ToBeRemovedTimes.add(PositionTime);
System.out.println("removed");
}
PositionTime++;
}
for(int temp: ToBeRemovedTimes){
ButtonsPressedTimes.remove(temp);
System.out.println("DONE");
}
DoublePresses.clear();
for(Integer temp: ButtonsPressedChar){
System.out.println("hi 1");
if(PossiblePresses[temp] == 0){
System.out.println("First Press" + temp + PossiblePresses[temp]);
PossiblePresses[temp] = 2;
}
else if(PossiblePresses[temp] == 2){
DoublePresses.add(temp);
System.out.println(ButtonsPressedChar.size());
ToBeRemovedChars.add(temp);
ButtonsPressedTimes.remove(PositionChar);
System.out.println("DOUBLE PRESS" + temp.toString()+ PossiblePresses[temp]);
}
System.out.println("hi 2");
PositionChar++;
}
for(Integer temp: ToBeRemovedChars){
while(ButtonsPressedChar.contains(temp)){
ButtonsPressedChar.remove(temp);
}
System.out.println("DONE");
}
ToBeRemovedChars.clear();
LastTimeForDoublePress =NowTime;
}
public class Keys implements KeyListener{
@Override
public void keyReleased(KeyEvent e) {
// TODO Auto-generated method stub
if(ButtonsHeld.contains(e.getKeyCode())){
Integer tempInteger = new Integer(e.getKeyCode());
ButtonsHeld.remove(tempInteger);
}
else
System.out.println("ERROR");
System.out.println(e.getKeyCode());
ButtonsPressedChar.add(e.getKeyCode());
ButtonsPressedTimes.add(System.currentTimeMillis())
}
@Override
public void keyPressed(KeyEvent e) {
if(ButtonsHeld.contains(e.getKeyCode())){
System.out.println("Error: Attempted Key Press Twice, original press was not removed from ButtonsHeld");
}
else if(!ButtonsHeld.contains(e.getKeyCode())){
ButtonsHeld.add(e.getKeyCode());
}
}
@Override
public void keyTyped(KeyEvent e) {
// TODO Auto-generated method stub
}
public ArrayList<Integer> ButtonsHeld = new ArrayList<Integer>();
public void KeyHeldChecker(){
}
}
ですが、私はコードブロック
二重鍵を検出してそれを得るためにすべてを調整しなければなりませんでしたプレスは1秒間に60回実行されます。 'hi 1'と 'hi 2'は、何が実行されているかを見るためのデバッグの一部に過ぎませんでした。これは、J(キーコード74)が一回押されたときに実行されているものです:最初は
74 hi 1 First press740 hi 2 hi 1 1 DOUBLE PRESS742 hi 2 DONE
を私は可能なプレスが適切に消去されていないと思ったが、ループのために働いているようです。なぜ誰かがこれがうまくいかないこと、あるいはこれを行うためのよりよい方法を知っていれば、それはすばらしいことになります。
申し訳ありませんが、私は正直なところ、それを動作させることができず、四つのスペースを見つけられません。私はそれが見たり、理解することをあまりにも困難にしないことを願っています。
申し訳ありませんJava悪魔、私はより具体的だったはずです。私がこれを必要とするのは、2人のプレイヤーが2人のゲームでダブルプレスを検出することです。キーボードを使用している2人が互いに干渉したり、複数のボタンを押すことに干渉することさえあります。 P.S.二重プレスはダッシュ機能のためのものです –
Java悪魔は、他のプレイヤーが二重押している間にダブルプレイプログラムを妨害することができませんでした。あなたがそれをする方法を知っていれば、それは素晴らしいだろうが、なぜそれがうまくいかないのか分かっていれば、それはもっと良くなるだろう。 –
@SamChapmanはい、私は彼らがお互いのプレスを妨げる可能性があることを見ている。これが当てはまる場合、私は各プレイヤーがキーを設定しているだけなので、私の例を静的にせずに、各プレイヤーの検出クラスのインスタンスを持ち、聴取者は、そのプレイヤーの検出インスタンス。申し訳ありませんが、あなたのために何かを草案する時間がありません。 –