試試這個http://jsfiddle.net/mpxML/34/。
我加了MIN_DIST_TO_DRAW_SKID
變量。如果skidMarks
中的兩個點比該值更遠,則畫布不繪製線(只需調用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)]);
}
//....
}
你爲什麼不重置陣列的每個防滑完成後? –
哦。那種撬痕。那時不知道! :) – asawyer
就在我頭頂。你可以有一個單獨的,不可見的畫布,你可以在其上繪製滑動標記,然後在每個繪製週期中繪製滑動元素下面的移動元素?這樣,您不需要跟蹤skidmark位置,也不需要在每一幀上重新繪製它們。 (這是假設合併兩個畫布的快速方法,我真的不知道) –