2012-01-14 11 views
-2

私はhtml5とjavascriptでpong reduxを開発しています。 Dを押したままball.speedModifier変数から4を減算し、Dを解放したときに4を加算するように修正する必要があります。鍵が離されたときに修飾子を0に戻すだけでなく、なぜなら私は複数のものを一度に変更してそのスタックを重ねて変更したいからです。私の現在のキープレス検出システムでは、変数の加減算は60 FPSで繰り返されますが、その量が再び減算されるまで1回だけ発生します。ここで変数を一時的に変更する手助けが必要

は、私のコードのpastieです: HTML:http://pastebin.com/txeNftNT
Javascriptを:http://pastebin.com/scpBqGqx

+1

SO Q&Aは自己完結型である必要があります。 (特に対話的にコードを実行できる場合は)外部のペーストビンにリンクするのは良いですが、[最小サンプル](完全で簡潔な&代表)を質問に含めるべきですリンクされたページが取り下げられたり編集されたりします。 – outis

答えて

0

これを行う最も簡単な方法は、各キーの追加プロパティを追跡することだと思います。キーが停止しているかどうかだけを調べるのではなく、前回のcheckInput()の繰り返しでキーがダウンしていたかどうかを調べることもできます。そうすることで、 "D"キーが押されていても、最後の反復でダウンしていなければ、ball.speedModifierから4を引いたものです。あるいは、 "D"キーがアップで、最後の反復でアップしていない場合は、ball.speedModifierに4を戻します。

この作業を行うための最後のキーは、すべてのcheckInputループの最後です。各キーが停止しているかどうかを保存します。その後、checkInput()の次のループでチェックをやり直す準備が整いました。

以下は疑似コードですが、うまくいけばよいと思います。

function checkInput(){ 
if(d.isDown()){ 
    if(!d.wasDown()){ 
      ball.speedModifer -= 4; 
    } 
}else{ 
    if(d.wasDown()){ 
      ball.speedModifier += 4; 
    } 
} 

d.wasDown = d.isDown; 
} 

場合によっては、私も実際の例をまとめます。 3つの変更に注意してください。 pressedKeysは配列ではなく、既存のKEYオブジェクトのVALUESに対応するKeyCodeのオブジェクトです。そして、このキーの値は、 "wasDown"と "isDown"という2つのキーを持つオブジェクトそのものです。次に、init()の最後にこのオブジェクトをあらかじめ設定しておき、配列の代わりに新しいオブジェクトを使ってcheckInputでさまざまなチェックと更新を行います。

http://jsfiddle.net/gUgGf/

うまくいけば、それが役立ちます!

+1

うわー、これは私が必要としていたものです!手伝ってくれてどうもありがとう! –

0

は、私はあなたがやりたいことには、2つの非常に単純な方法を考えることができます。

  1. は、その店舗の変数を持っていますその値を直接編集するのではなく、適用可能な修飾子の計算をすべて実行します。
  2. あなた​​イベントからの内のキーを押しpressedThisFrameのようなものをという名前の配列を持っており、メインループであなたはpressedThisFrameから出て、あなたの全体的なpressedKeys配列へのエントリを移動し、その移動の一部は修飾子があるものは何でも実行する必要適切な。
+0

それは私がやろうとしていることには当てはまりません。多分あなたはコード例を提供することができますか? 簡単に言えば、私はDを押してボールをスローダウンし、Dをリリースすると通常のスピードに戻しますが、ボールのスピードの変数を直接設定することは望ましくありません。代わりに、ボールの速度を変更している変数に追加することをお勧めします。 –

関連する問題