আপনার কোডটিতে কয়েকটি সমস্যা রয়েছে।
প্রথমত, আপনার সংজ্ঞায়:
var shrink = function(p) {
for (var i = 0; i < 100; i++) {
p.radius -= 1;
}
function asplode(p) {
setInterval(shrink(p),100);
balls.splice(p, 1);
}
}
asplodeভিতরে স্কোপ স্থানীয় shrinkএবং তাই আপনি যে কোডটি updateকল করার চেষ্টা করছেন সেখানে কোড অ্যাক্সেসযোগ্য নয়। জাভাস্ক্রিপ্ট সুযোগ ফাংশন-ভিত্তিক, তাই updateদেখতে পাচ্ছি না asplode, কারণ এটা ভিতরে নয় shrink। ( আপনার কনসোলে আপনি এর মতো একটি ত্রুটি দেখতে পাবেন Uncaught ReferenceError: asplode is not defined:)
আপনিই প্রথম চলন্ত পরিবর্তে চেষ্টা করতে পারে asplodeবাইরে shrink:
var shrink = function(p) {
for (var i = 0; i < 100; i++) {
p.radius -= 1;
}
}
function asplode(p) {
setInterval(shrink(p),100);
balls.splice(p, 1);
}
তবে আপনার কোডে আরও বেশ কয়েকটি সমস্যা রয়েছে যা এই প্রশ্নের ক্ষেত্রের বাইরে:
setIntervalএকটি ফাংশন আশা করে setInterval(shrink(p), 100)কারণ setIntervalপেতে ফেরত মান এর আশু-প্রার্থনা shrink(p) । আপনি সম্ভবত চান
setInterval(function() { shrink(p) }, 100)
আপনার কোড for (var i = 0; i < 100; i++) { p.radius -= 1; }সম্ভবত আপনি যা ভাবেন তা করেন না। এটি তাত্ক্ষণিকভাবে হ্রাস অপারেশনটি 100 বার চালাবে এবং তারপরে ফলাফলটি দৃশ্যত প্রদর্শিত হবে। আপনি যদি প্রতিটি নতুন আকারে বলটি পুনরায় রেন্ডার করতে চান তবে আপনাকে পৃথক টাইমিং কলব্যাকের (প্রতিটি setIntervalঅপারেশনের মতো ) অভ্যন্তরে প্রতিটি পৃথক হ্রাস করতে হবে ।
.spliceএকটি সংখ্যার সূচক আশা করে, কোনও বস্তু নয়। আপনি এর সাথে কোনও বস্তুর সংখ্যাসূচক সূচক পেতে পারেন indexOf:
balls.splice(balls.indexOf(p), 1);
আপনার ব্যবধানটি প্রথমবারের মতো balls.spliceচলার সাথে সাথে বিবৃতিটি ইতিমধ্যে ঘটেছে (এটি প্রায় 100 মাইল আগে ঘটেছিল, সঠিক হওয়ার জন্য)। আমি ধরে নিই যে আপনি যা চান তা তা নয়। পরিবর্তে, আপনি একটি decrementing ফাংশন যা বারবার ডাকা পরার থাকা উচিত setIntervalএবং পরিশেষে সঞ্চালিত balls.splice(p,1)পর p.radius == 0।
asplodeবিশ্বব্যাপী সুযোগে ঘোষিত হয় না (বা বিশেষত, অ্যাক্সেসযোগ্য স্কোপে সংজ্ঞায়িত নয়update); আপনার কনসোলটি পরীক্ষা করুন।