2011-07-25 10 views
2

私は関数を呼び出すためにスペース(またはリターン)を押すOSX用のObj-Cアプリを開発中です。しかし、ユーザがスペースバーを数回押した後に、ユーザがまだスペースを押しているとプログラムが考えると、クラッシュするまで何千回も関数を呼び出すことがあります。私はスペースを2秒に1回しか押すことができないので、クラッシュを遅くするために遅れを入れました。クラッシュを止める唯一の方法は、ユーザーがスペースをもう一度押すことです。Obj-Cのスペースが押されたバグ?

どうすれば解決できますか?

int key = ([[incomingEvent charactersIgnoringModifiers] UTF8String])[0]; 
key = [incomingEvent keyCode]; 
switch(key) 
{ 
    // return and space 
    case 36: 
    case 49: 

     if (CFAbsoluteTimeGetCurrent() - lastSpaceTime > acceptableTimeBetweenSpace) 
     { 
      // do stuff 
      printf("space pressed"); 

      // lastSpaceTime is now 
      lastSpaceTime = CFAbsoluteTimeGetCurrent(); 
     } 
     else 
     { 
      printf("not enough time since last space!"); 
      // break; 
      // return incomingEvent; 
     } 
     break; 

    case 53: 

     //do stuff 
     break; 
} 

私はこの追加しようとした:他のブロックに

CGEventRef simulateSpaceUp, simulateSpaceDown; 

             simulateSpaceDown = CGEventCreateKeyboardEvent (NULL, (CGKeyCode)49, true); 
             simulateSpaceUp = CGEventCreateKeyboardEvent (NULL, (CGKeyCode)49, false); 

を。私はここで間違って何をしていますか?

+2

なぜ 'key'をそのように2回割り当てていますか? –

+0

ああ、私が切り出したこれらの前の大した事件は、最初のキーラインはずっと早いものです。明快さの欠如のため申し訳ありません:) – Sciguy77

+0

問題がこれらの行にあるとどのように判断したのかを説明できますか?あなたが切り取ったビットにはないと確信していますか? –

答えて

0

ここではスペースバーのキーを認識するのは問題ではないようです。 遅延が入れられるのは、多少の時間(または負)に調整されているようです。

NSTimerを使用してスペースバーキー方式をシャットダウンする理由は何ですか? uはちょうどbool小道具(canNotReactToSpaceBar)をtrueに設定し、タイマーが切れた後、タイマーがなくなるとfalseに戻します。 boolを使ってブールをtrueに設定したときの特定のメソッドをシャットアウトします。

関連する問題