2011-08-23 9 views
2

私は、いくつかの基本的な動きで車のHTML5キャンバスに少しテストを作成してきたが、ここにある:(矢印キーは車を移動する)HTML5 Canvasを使用して「スキッドマーク」を複製するにはどうすればよいですか?

http://jsfiddle.net/mpxML/27/

ザ・私がしようとしてきたと思いますスケートマークを作成する最良の方法です。上のキーを押したままにすると、いくつかのマークがつくられているのを見ることができますが、もう一度やり直すと一緒につながります。明らかに、私がやっているやり方は理想的ではありません。これは、座標を配列にプッシュし、次にそれらの座標をリンクするためにlineToを使用しています。

問題: - 行が をリンクアップ - スキッドを覚えて配列にcordinatesをプッシュする最良の方法 ではないかもしれない - 私は別のものを追加するとき、私は1行のみを持っているので、パフォーマンスはfutherを被るだろう。

あなたは何をアドバイスしますか?

卑劣な質問:背景が固定されているのではなく、シーンを「パン」にする最も良い方法は何ですか?

おかげで、 ヘンリー

+1

各スキッドが完了した後、あなたは、配列をリセットしない理由:

これは私が変更を加えたコードの一部ですか? –

+1

ああ。そんなスキッドマーク。いいえ、その後アイデア! :) – asawyer

+0

ちょうど私の頭の上から離れて。スキッドマークを描く別々の、見えないキャンバスを持つことができますか?次に、描画サイクルごとに移動する要素の下に描画しますか?この方法では、スキッドマークの位置を追跡する必要はなく、フレームごとに再描画する必要はありません。 (これは、2つのキャンバスをマージする速い方法があると仮定しています。私は本当に分かりません。) –

答えて

1

このhttp://jsfiddle.net/mpxML/34/を試してみてください。

MIN_DIST_TO_DRAW_SKID変数を追加しました。 skidMarksの2点がその値よりも遠い場合、キャンバスは線を描画しません(moveToメソッドを呼び出します)。

// here 
var MIN_DIST_TO_DRAW_SKID = 30; 

function drawStageObjects() { 

    if(car.drift > 30 || car.drift < -30) { 
     skidMarks.push(car.x, car.y); 
    } else { 
    } 

    context.beginPath() 
    context.moveTo(skidMarks[0],skidMarks[1]); 
    for(var i=0; i < skidMarks.length; i = i + 2) { 

     skidPoint = Math.abs(skidMarks[(skidMarks.length-4)]) - Math.abs(skidMarks[(skidMarks.length-2)]); 

     // here 
     var dist = Math.sqrt((skidMarks[i] - skidMarks[i - 2]) * (skidMarks[i] - skidMarks[i - 2]) 
       + (skidMarks[i + 1] - skidMarks[i - 1]) * (skidMarks[i] - skidMarks[i - 1])); 

     if(skidPoint > 20 || dist > MIN_DIST_TO_DRAW_SKID) { 
      context.moveTo(skidMarks[i], skidMarks[i + 1]); 
     } else { 
      context.lineTo(skidMarks[i],skidMarks[i + 1]); 
     } 

     $('#stats').html(skidPoint); 
     //$('#stats').html(skidMarks[(skidMarks.length-4)] + "," +skidMarks[(skidMarks.length-2)]); 
    } 

    //.... 
} 
+0

ちょっと!答えをありがとう。フィドルは働いていないようです:それはあなたのために働くのですか?ありがとう – Henryz

+0

はい、それは完璧に動作します。どうしたの? –

+0

@Henryz変更したコードを追加しました。 jsfiddleが機能しない場合は、そのコードを試してみてください。 –

関連する問題