භාවිත: context.clearRect(0, 0, canvas.width, canvas.height);
සමස්ත කැන්වසය ඉවත් කිරීමට වේගවත්ම හා විස්තරාත්මක ක්රමය මෙයයි.
පාවිච්චි කරන්න එපා: canvas.width = canvas.width;
යළි පිහිටුවීම canvas.width
සියලු කැන්වස් තත්වය (උදා: පරිණාමන, රේඛීය පළල, ආ roke ාත ස්ටයිල්, ආදිය), එය ඉතා මන්දගාමී වේ (clearRect හා සසඳන විට), එය සියලු බ්රව්සර්වල ක්රියා නොකරයි, ඔබ සැබවින්ම කිරීමට උත්සාහ කරන්නේ කුමක්ද යන්න එය විස්තර නොකරයි.
පරිණාමිත ඛණ්ඩාංක සමඟ කටයුතු කිරීම
ඔබ (උදා: භාවිතා පරිවර්තනය න්යාසය වෙනස් කර තිබේ නම් scale
, rotate
හෝ translate
), පසුව context.clearRect(0,0,canvas.width,canvas.height)
ඉඩ, එම කැන්වසය මතින් සමස්ත දෘශ්යමාන කොටස ඉවත් නොවනු ඇත.
විසඳුම? කැන්වසය ඉවත් කිරීමට පෙර පරිවර්තන අනුකෘතිය නැවත සකසන්න:
// Store the current transformation matrix
context.save();
// Use the identity matrix while clearing the canvas
context.setTransform(1, 0, 0, 1, 0, 0);
context.clearRect(0, 0, canvas.width, canvas.height);
// Restore the transform
context.restore();
සංස්කරණය කරන්න:
මම දැන් පැතිකඩක් කර ඇති අතර (ක්රෝම් හි) පරිණාමනය නැවත සකස් නොකර 300x150 (පෙරනිමි ප්රමාණය) කැන්වස් ඉවත් කිරීම 10% ක් පමණ වේගවත් වේ. ඔබේ කැන්වසයේ ප්රමාණය වැඩි වන විට මෙම වෙනස පහත වැටේ.
එය දැනටමත් සාපේක්ෂව නොවැදගත් ය, නමුත් බොහෝ අවස්ථාවන්හි දී ඔබ ඉවත් කිරීමට වඩා සැලකිය යුතු ප්රමාණයක් ඔබ අඳිනු ඇති අතර මෙම කාර්යසාධන වෙනස අදාල නොවන බව මම විශ්වාස කරමි.
100000 iterations averaged 10 times:
1885ms to clear
2112ms to reset and clear
clearRect
ඔබට පරිවර්තනය නොකළ සන්දර්භයක් තිබිය යුතු බව හෝ ඔබේ සත්ය සීමාවන් නිරීක්ෂණය කළ යුතු බව සලකන්න .