আমি আমার হোমপৃষ্ঠায় পংগুলিতে যে প্রাসঙ্গিক যুক্তিটি ব্যবহার করেছি তা এখানে :
মূলত, বলটি প্যাডেলের সাথে সংঘর্ষের সময়, এর দিকটি সম্পূর্ণ অবহেলা করা হয়; প্যাডেলের কেন্দ্র থেকে এটি কতটা দূরে সংঘর্ষ হয়েছিল সে অনুসারে এটিকে একটি নতুন দিক দেওয়া হয়েছে। যদি বলটি ঠিক মাঝখানে প্যাডেলটিকে আঘাত করে, তবে এটি ঠিক অনুভূমিকভাবে প্রেরণ করা হবে; যদি এটি সরাসরি প্রান্তে আঘাত করে তবে এটি একটি চরম কোণে (75 ডিগ্রি) উড়ে যায়। এবং এটি সর্বদা স্থির গতিতে ভ্রমণ করে।
var relativeIntersectY = (paddle1Y+(PADDLEHEIGHT/2)) - intersectY;
প্যাডলের মাঝারি ওয়াই মানটি ধরুন এবং বলের Y ছেদটি বিয়োগ করুন। প্যাডেলটি যদি 10 পিক্সেল বেশি হয় তবে এই সংখ্যাটি -5 এবং 5 এর মধ্যে হবে I
var normalizedRelativeIntersectionY = (relativeIntersectY/(PADDLEHEIGHT/2));
var bounceAngle = normalizedRelativeIntersectionY * MAXBOUNCEANGLE;
আপেক্ষিক চৌরাস্তা নিন এবং প্যাডলের উচ্চতার অর্ধেক দ্বারা ভাগ করুন। এখন আমাদের -5 থেকে 5 নম্বর দশমিক -1 থেকে 1; এটা স্বাভাবিক করা হয়েছে । তারপরে এটি সর্বাধিক কোণ দিয়ে গুন করুন যার মাধ্যমে আপনি বলটি বাউন্স করতে চান। আমি এটি 5 * পাই / 12 রেডিয়েন (75 ডিগ্রি) এ সেট করেছি।
ballVx = BALLSPEED*Math.cos(bounceAngle);
ballVy = BALLSPEED*-Math.sin(bounceAngle);
অবশেষে, সহজ ত্রিকোণমিতি ব্যবহার করে নতুন বলের বেগ গণনা করুন।
এটি আপনি যে প্রভাবটির জন্য যাচ্ছেন তা পুরোপুরি নাও হতে পারে, বা আপনি সর্বোচ্চ গতিতে স্বাভাবিক আপেক্ষিক ছেদটি গুণ করে একটি গতিও নির্ধারণ করতে চাইতে পারেন; এটি বলটিকে কোনও প্যাডেলের প্রান্তের নিকটে আঘাত করলে, বা এটি কেন্দ্রের কাছে আঘাত করলে ধীর গতিতে এগিয়ে যাবে।
আমি সম্ভবত কোনও ভেক্টর দেখতে কেমন হবে বা বলগুলি কীভাবে ভেক্টরের ভেরিয়েবলটি সংরক্ষণ করতে পারি তার গতি (গতি এবং দিক) সম্পর্কে কিছু কোড চাই।
কোনও ভেক্টরে গতি এবং দিক উভয়ই অন্তর্নিহিতভাবে থাকে। আমি আমার ভেক্টরটিকে "ভিএক্স" এবং "ভিআই" হিসাবে সঞ্চয় করি; অর্থাৎ x দিকের গতি এবং y দিকের গতি। আপনি যদি পদার্থবিজ্ঞানে কোনও প্রাথমিক কোর্স না নিয়ে থাকেন তবে এটি আপনার কাছে কিছুটা বিদেশী বলে মনে হতে পারে।
আমি এটি করার কারণ হ'ল এটি প্রতি ফ্রেমের প্রয়োজনীয় গণনা হ্রাস করে; প্রতিটি ফ্রেম, আপনি কেবল করেন x += vx * time;
এবং y += vy * time;
সর্বশেষ ফ্রেমের পর থেকে সময়টি যেখানে মিলি সেকেন্ডে হয় (তাই বেগ প্রতি মিলি সেকেন্ডে পিক্সেল হয়)।
বলটি বাঁকানোর ক্ষমতা বাস্তবায়নের বিষয়ে:
প্রথমত, বল আঘাত করার সময় আপনাকে প্যাডেলের গতিবেগ জানতে হবে; যার অর্থ আপনার প্যাডেলের ইতিহাস সম্পর্কে নজর রাখা দরকার, যাতে আপনি প্যাডেলের অতীত অবস্থানগুলির এক বা একাধিক জানতে পারেন যাতে আপনি তাদের বর্তমান অবস্থার সাথে তুলনা করতে পারেন এটি সরিয়ে নিয়েছে কিনা তা দেখতে। (পজিশনে পরিবর্তন / সময়ে পরিবর্তন = গতিবেগ; সুতরাং আপনার 2 বা ততোধিক অবস্থানের প্রয়োজন এবং সেই অবস্থানগুলির সময়)
আপনাকে এখন বলের কৌণিক গতিও ট্র্যাক করতে হবে , এটি যে বক্ররেখাটি ভ্রমণ করছে তা কার্যত প্রতিনিধিত্ব করে তবে এটি বলের বাস্তব-বিশ্বের স্পিনের সমতুল্য। আপনি প্যাডেলের সাথে সংঘর্ষের সময় বলের আপেক্ষিক অবস্থান থেকে বাউন্স কোণকে কীভাবে বিভক্ত করবেন তার অনুরূপ, আপনারও এই কৌণিক বেগ (বা স্পিন) সংঘর্ষের সময় প্যাডেলের বেগ থেকে বিভক্ত করতে হবে। বাউন্স এঙ্গেলের সাথে আপনার মতো স্পিন সেট করার পরিবর্তে আপনি বলের বিদ্যমান স্পিনটি যোগ করতে বা বিয়োগ করতে চাইতে পারেন, কারণ এটি গেমগুলিতে ভালভাবে কাজ করার ঝোঁক রাখে (প্লেয়ার বল স্পিনি করছে এবং এটি স্পিনে আনতে পারে) আরও ভয়াবহভাবে, বা স্পিনটিকে সরাসরি ভ্রমণ করার প্রয়াসে প্রতিহত করুন)।
নোট, তবে, যদিও এটি বাস্তবায়ন করার সবচেয়ে সাধারণ জ্ঞান এবং সম্ভবত সবচেয়ে সহজ উপায়, তবে একটি বাউনের আসল পদার্থবিজ্ঞান কেবলমাত্র যে বস্তুটি আঘাত করে তার গতিবেগের উপর নির্ভর করে না; কোন কৌণিক গতিবেগের কোনও বস্তু (কোনও স্পিন) যা কোনও কোণে একটি পৃষ্ঠকে আঘাত করে, তার গায়ে স্পিন দেওয়া হবে। এটি একটি আরও ভাল গেম মেকানিকের দিকে পরিচালিত করতে পারে, সুতরাং আপনি এটি সন্ধান করতে চাইতে পারেন তবে আমি এর পিছনে পদার্থবিজ্ঞানের বিষয়ে নিশ্চিত নই তাই আমি এটি ব্যাখ্যা করার চেষ্টা করব না।