ব্যবহার করুন: context.clearRect(0, 0, canvas.width, canvas.height);
পুরো ক্যানভাসটি সাফ করার জন্য এটি দ্রুত এবং সর্বাধিক বর্ণনামূলক উপায়।
ব্যবহার করবেন না: canvas.width = canvas.width;
রিসেট canvas.width
রিসেট সব ক্যানভাস রাষ্ট্র (যেমন রূপান্তরের, lineWidth, strokeStyle, ইত্যাদি), এটা খুবই ধীর (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% দ্রুত। আপনার ক্যানভাসের আকার বাড়ার সাথে সাথে এই পার্থক্যটি হ্রাস পাবে।
এটি ইতিমধ্যে তুলনামূলকভাবে তুচ্ছ, তবে বেশিরভাগ ক্ষেত্রে আপনি সাফ করার চেয়ে আপনি যথেষ্ট পরিমাণে আঁকবেন এবং আমি বিশ্বাস করি যে এই পারফরম্যান্সের পার্থক্য অপ্রাসঙ্গিক be
100000 iterations averaged 10 times:
1885ms to clear
2112ms to reset and clear
clearRect
আপনার জন্য হয় একটি অপরিকল্পিত প্রসঙ্গ থাকতে হবে, বা আপনার আসল সীমানা ট্র্যাক করা উচিত।