"উদ্বিগ্ন" গেম প্রকল্পগুলির বাইরে


22

একজন গেম ডেভেলপারকে জানা উচিত যে গণিতের ধরণের উপরে আমি এই উত্তরটি পড়ছিলাম এবং এই অংশটি আমার কাছে সত্যিই দাঁড়িয়ে ছিল:

How do I move my game object? The novice might say:

"I know! I'll just do:" object.position.x++.

এটি আমি কীভাবে এটি করতে ভাবব তাই আমি অনুমান করি যা আমার দক্ষতার স্তরটি দেখায়। কমপক্ষে 2D সাইড-স্ক্রোলিং, আর্কেড-স্টাইলের গেমগুলির প্রকারের জন্য যা আমি অতীতে তৈরি করেছি, এটাই আমার প্রয়োজন। যে এবং একটি ত্রিকোণমিতি একটি বিট।

প্রকৃতপক্ষে, আমি পোস্টটি পড়ার আগে খুব বেশি লিনিয়ার বীজগণিত ব্যবহার করি নি বা কোয়ার্টেরিয়ানের কথাও শুনেছি। এটি কি কারণ আপনি 3 ডি নিয়ে কাজ না করা অবধি এই গণিতগুলি প্রদর্শিত হবে না বা এটি কারণ আমার 2 ডি গেমগুলি মোটামুটি সহজ যে আমি নির্বিকার প্রয়োগগুলি থেকে দূরে চলে এসেছি।

ফলোআপ প্রশ্ন: আমি যদি এই ধরণের গণিতের সাথে পরিচিত হতে চাই তবে আমার কোন ধরণের প্রকল্প নেওয়া উচিত? IE: একটি গেম ইঞ্জিন লিখুন, 3 ডি গেমের উপর কাজ করুন ইত্যাদি etc.


1
khanacademy.org শিক্ষানবিশ এবং উন্নত গণিত শেখার জন্য দুর্দান্ত। এছাড়াও সেখানে অর্জন আছে! কোনও বিরক্তিকর একাডেমিয়া বাঁচার জন্য গেম তত্ত্বের মতো কিছুই নয়।
মিথ্যাচারিত কাবিয়ার

উত্তর:


16

এটির সাথে আসল কৌশলটি উচ্চ বিদ্যালয় স্তরের বিজ্ঞান; আপনি উচিত কাজ করেছেন। আপনি যদি দ্রুত গুগল অনুসন্ধান করেন নি এমন ইভেন্ট আপনাকে শুরু করবে । আপনি কীভাবে 'আভিজাত্য' মানসিকতা এড়ানোর তা বোঝাতে চান্দ্র ল্যান্ডারের উদাহরণটি গ্রহণ করুন।

একবার আপনি পড়লেন যে [change in position] = [velocity] * [time passed]এটি স্পষ্ট হয়ে যায় যে এই ভেরিয়েবলগুলি ট্র্যাক করে রাখা দরকার:

float x, y; // Your X and Y co-ordinates.
float vx, vy; // Your X and Y velocity.
float deltaTime; // Change in time.

এর পরে আপনি প্রতিটি ফ্রেমে পজিশনে কেবল বেগটি প্রয়োগ করবেন:

// Change X by the velocity multiplied by the time.
x = x + vx * deltaTime;
y = y + vy * deltaTime;

এখন আমরা প্রতিটি ফ্রেমের বেগটি পরিবর্তন করতে চাই যাতে আমরা মাধ্যাকর্ষণ যুক্ত করতে পারি। ঠিক একই উত্স অনুসারে [change in velocity] = [acceleration] * [time passed]। সুতরাং আমরা সঠিক একই নীতি প্রয়োগ করতে পারি:

const float gravity = 9.8f; // The gravity of the earth.

// Add gravity to the vertical velocity.
vy = vy + gravity * deltaTime;
// Change X by the velocity multiplied by the time.
x = x + vx * deltaTime;
y = y + vy * deltaTime;

খেলোয়াড়ের তার মহাকাশযান নিয়ন্ত্রণ করার জন্য এখন আপনার একটি উপায় দরকার। বেসিক পদার্থবিজ্ঞান সম্পর্কে আরও পড়ার মাধ্যমে আপনি শিখবেন যে গতিটি বলের ফল - আমি কোনও উত্স খুঁজে পাই না তবে [change in acceleration] = ([force] / [mass]) * time(যতদূর মনে পড়ে)। সুতরাং যখন প্লেয়ার কোনও কী চাপলে আপনি কেবল কোনও কিছুর সাথে ভেরিয়েবলগুলি সেট করে রাখবেন fxএবং fyআপনার আপডেটের সময় সমীকরণটি প্রয়োগ করবেন।

শেষ পর্যন্ত আপনার গেমের অবজেক্টগুলির চারপাশে পদার্থবিজ্ঞান সম্পর্কে আপনার চিন্তা করা উচিত - এবং তাদের যেভাবে আপনি ভাবেন সেভাবে চালিত করার চেষ্টা করার পরিবর্তে সমীকরণটি সন্ধান করুন

ভবিষ্যত দ্রষ্টব্য: মনে রাখবেন যে এটি অবশ্যই পদার্থবিজ্ঞানের সর্বোত্তম উপায় নয় (এটাকে অয়লার একীকরণ বলা হয় এবং এটি স্বল্প ফ্রেমের হারে কিছু বিশ্রী দৃশ্যের দিকে নিয়ে যেতে পারে) - আপনাকে জিনিসগুলি করার অন্যান্য উপায়গুলি খতিয়ে দেখতে হবে (সেই নিবন্ধটি বেশ কিছু খালি বেসিক উপর ভাল লেখার আপ)। তবে আপাতত ইউলর ইন্টিগ্রেশনের সাথে লেগে থাকুন, কারণ এর অর্থ আপনি একটি জিনিস কম শিখতে চাইছেন।

কোন গেমগুলি আপনাকে সঠিক মানসিকতায় কীভাবে চিন্তা করতে শেখায়?

আপনি কীভাবে পরীক্ষা করবেন যে আপনি কাজগুলি সঠিকভাবে এবং সঠিক মানসিকতার সাথে করেছেন? Sleep(10 milliseconds)আপনার গেমের লুপটিতে একটি সন্নিবেশ করান এবং সমস্ত কিছু এখনও পুরো ফ্রেমেট্রেটের মতো একইভাবে স্থানান্তরিত এবং প্রতিক্রিয়াযুক্ত হওয়া উচিত।

অবশেষে, 2 ডি গেমসের কাজ করার বিষয়ে আপনার ভাল পরিমাণ অভিজ্ঞতা না পাওয়া অবধি দয়া করে 3 ডি (এবং কোয়ার্টারিয়নস এবং ম্যাট্রিকেস) থেকে ভাল রাখুন force আমি বলার উদ্যোগ নেব যে বেশ কয়েকটি গেম ডেভেলপাররা আসলে কোয়ার্ট্রিনস বা ম্যাট্রিকেস কীভাবে কাজ করে তা জানেন না - তবে কেবল সেগুলি কীভাবে ব্যবহার করতে হয় তা জানেন - অনেক পরে তাদের কাছে যান (বা কখনই নয়, 2 ডি গেমগুলি অনেক মজাদার এবং এটি বেশ কার্যকর হতে পারে) সফল)। মৌলিক স্তরে এটি করার জন্য আপনার লিনিয়ার বীজগণিত এবং সত্যিকারের আরও কিছু জানা দরকার নেই (তবে এটি সত্যই সহায়তা করে, তাই যদি আপনি পারেন তবে কিছু নাইট ক্লাসে যান)।

চূড়ান্ত বোনাস: আমার শিল্প শিক্ষক আমাকে সবসময় বলেছিলেন যে "আপনি যা মনে করেন তা আঁকবেন না , যা দেখছেন তা আঁকুন।" একই জিনিস এখানে প্রযোজ্য "তোমার কি মডেল না মনে ঘটবে ( object.position++), মডেল সেখানে কি ঘটছে (` object.position + + = বেগ * সময়) "- অন্তত যুক্তিসংগত সীমা (যদি আপনি পুরোপুরি সঠিক সিস্টেম মডেলিং হয় না, কিন্তু করতে এমন কিছু যা একটি ভাল অনুকরণ)।


আমি পরীক্ষার জন্য কৃত্রিম ল্যাগ ofোকানোর আপনার ধারণা পছন্দ করি। এছাড়াও, পৃথিবীর মাধ্যাকর্ষণ 9.8, 9.1 নয়
স্টিভ

"আপনি যা ভাবেন তার মডেল করবেন না, কী ঘটে তা মডেল করবেন না" যদি আপনি একটি আসল সিমুলেশন না লিখে থাকেন তবে সাবধান হন। আপনার প্রকল্পের জন্য প্রয়োজনীয় হিসাবে স্কেল। কখনও কখনও "আপনার মনে হয় যা ঘটে" আপনার ডিজাইনের জন্য একটি ভাল উত্তর।
বিশৃঙ্খলাবিদ

@ চাওসটেকনিশিয়ান এই স্তরে "আপনার মনে হয় যা ঘটে" তা হ'ল object.position++। আমি উত্তরটি পরিষ্কার করব।
জোনাথন ডিকিনসন

-1 এর জন্য instead of trying to make them move in the way you would think, rather look up the equation। এটি সমীকরণগুলি বোঝার বিষয়ে , সেগুলি অনুসন্ধানের জন্য নয়। সবচেয়ে গুরুত্বপূর্ণ বিষয়টি গেমটিকে মজাদার করে তোলা, এবং কে জানে, সম্ভবত আপনি কিছু পরিবর্তনশীল-ত্বরণটি মাধ্যাকর্ষণটিকে আরও মজাদার করে তুলবেন। তবে সমীকরণগুলি বুঝতে না পারলে কীভাবে এটি করবেন তা যুক্তি করা খুব শক্ত হতে চলেছে ।
ব্লুরাজা - ড্যানি পিফ্লুঘুফ্ট

3
@ ব্লুরাজা-ড্যানিপ্লুঘুফুট এটাই যে আমি তাকে বলেছিলাম: সমীকরণটি প্রথম স্থানে না জানা মানে আপনি কখনই এটি বুঝতে পারবেন না - এবং তাদের বোঝার একমাত্র উপায় হ'ল এগুলিকে বাস্তবে ব্যবহার করা।
জোনাথন ডিকিনসন

3

আমি মনে করি আপনি যে উত্তরটির সাথে সংযুক্ত হয়েছেন সেগুলির অংশগুলি তাদের উপস্থাপনায় কিছুটা অভিজাত ব্যক্তি। ভেক্টর ম্যাথের গুণাবলীর প্রশংসা করে তারপরে বলা হচ্ছে যে কোনও বস্তুর অবস্থান, দিক এবং দিকনির্দেশ প্রয়োজন এবং এটি তাত্পর্যপূর্ণ নয় কারণ এটি সত্যই কেবলমাত্র object.position.x += (object.velocity.x + object.acceleration.x) * deltaTime, যাহা, মৌলিকভাবে এমন কিছুতে সিদ্ধ হতে চলেছে যা এর থেকে আলাদা নয় object.position.x++। ঘূর্ণন প্রতিনিধিত্ব করার বিভিন্ন উপায়ে একটি চতুর্থাংশ; আমি তাদের পছন্দ করি তবে 3 ডি ঘূর্ণন বোঝার জন্য এগুলি অপরিহার্য নয়। বহু কোয়ার্টেরিয়ান ব্যবহারকারী যা বোঝায় তা সত্ত্বেও, তারা ঘূর্ণন গণিতের পবিত্র গ্রেইল নয়।

লিনিয়ার বীজগণিতের মূলনীতিগুলি সাধারণ 2D গতিবিধি, আবর্তন ইত্যাদিতে উপস্থিত থাকে তবে গণিতটি আরও সহজ কারণ কেবলমাত্র দুটি মাত্রা রয়েছে। এখানে একটি উদাহরণ

রৈখিক বীজগণিত সম্পর্কে আপনার জ্ঞান শিখতে / উন্নত করার প্রচুর উপায় রয়েছে:

  1. আমি লিনিয়ার বীজগণিতের কোর্স গ্রহণের বিষয়টি বিবেচনা করেছি তবে আমার কোর্সেলোড ইতিমধ্যে বেশ ভারী তাই আমি অতিরিক্ত কাজের ন্যায্যতা প্রমাণ করতে সক্ষম হইনি।
  2. লিনিয়ার বীজগণিত সম্পর্কে আমার বোধগম্যতা অনেক বেশি বৃদ্ধি পেয়েছে কারণ আমি বেশ কয়েকটি গেম ইঞ্জিন প্রোগ্রামিং ক্লাস করেছি। আমার জন্য, ভেক্টর, ম্যাট্রিকেস ইত্যাদির ব্যবহার খেলাটির দিকের চেয়ে ইঞ্জিনের দিকগুলিতে (সাধারণভাবে বলা) বেশি প্রচলিত। অবশ্যই, এটি বলার অপেক্ষা রাখে না যে আমি গেম কোডে ম্যাট্রিক্স ব্যবহার করি নি engine আমি কেবল ইঞ্জিন কোডিংয়ে যতবার ব্যবহার করি সেগুলি ব্যবহার করি না। ymmv
  3. এছাড়াও প্রচুর বই রয়েছে যা আপনাকে যেভাবে গণিত করা উচিত তা বুঝতে সহায়তা করতে পারে। আমি এই বইটি পছন্দ করি যার "গেমসের 3 ডি ম্যাথ" শীর্ষক একটি অধ্যায় রয়েছে।

সবশেষে, যদি আপনার গেমগুলির ডিজাইন জটিল গণিতের জন্য কল না করে তবে এটি ব্যবহার করবেন না। :) তবে, অবশ্যই, এটি আপনাকে এমন একটি গেমটি ডিজাইনে পরিণত করা থেকে বিরত রাখবেন না যা করে।


0

2 ডি এর জন্য চতুর্থাংশ সম্পূর্ণ ওভারকিল হবে, গণনার ক্ষেত্রে খুব ব্যয়বহুল হিসাবে উল্লেখ করা উচিত নয়। বিটম্যাপ রোটেশন (2 ডি) নিখুঁতভাবে অনেকগুলি প্ল্যাটফর্ম / লাইব্রেরি দ্বারা পরিচালিত হয়, কারণ এটি কোনও অ্যাপ্লিকেশন লেখার পক্ষে এতটাই মৌলিক, এবং এটি যেখানে নেই সেখানে 2D বিটম্যাপগুলি ঘোরানোও কিছুটা সহজ ট্রিগের চেয়ে বেশি কিছু নয়। 3 ডি-তে, জিনিসগুলি সাধারণ মানুষের পক্ষে যথেষ্ট কম স্বজ্ঞাত হয়ে ওঠে, যদি না বলা হয় যে মানুষ যখন বাইক চালিয়ে বাইরে বেরিয়ে আসে তখন তাদের থ্রিডি কোড লেখা বড় হয়েছিল।

লিনিয়ার বীজগণিত 2 ডি তে যেমন প্রযোজ্য তেমনি 3 ডি এর মতো এবং এটি এমন কিছু হওয়া উচিত যা আপনি কেবল জুনিয়র হাই স্কুল গণিত না করেও জানেন। আপনি যদি কখনও লাইন ছেদগুলি, বা কোনও লাইনে (একীকরণের) উপর পর্যায়ক্রমিক প্লট করে থাকেন তবে আপনি লিনিয়ার বীজগণিতটি ব্যবহার করেছেন।

3 ডি গণিত শিখতে সাধারণত 3 ডি স্পেসে একটি সাধারণ অবজেক্ট (কিউবের মতো) স্থাপন এবং একটি অস্থাবর ক্যামেরা প্রয়োগের মাধ্যমে শুরু হয় যা সেই বস্তুকে বিভিন্ন দৃষ্টিকোণ থেকে দেখতে পারে এবং এই দৃষ্টিভঙ্গিটি জিনিসগুলিকে আরও সরল রাখতে orthogonal শুরু করতে পারে। এটি আপনার স্ক্রিনের প্রতিনিধিত্বকারী 3 ডি প্লেনে পয়েন্ট প্রজেক্ট করার বিষয়ে ( এখানে সূত্র , আপনি এটি y এর সাথে x এবং z অক্ষেও প্রসারিত করবেন)। সত্যই, এটি আপনার অভিজ্ঞতার স্তর নির্বিশেষে কোনও 3 ডি ইঞ্জিন লেখার শুরু। ফ্ল্যাশ এবং প্রসেসিং.জেএস হ'ল এই জাতীয় কিছু সহজে প্রোটোটাইপ করার দুর্দান্ত উপায়।


0

আপনি সঠিক পথে আছেন যে লিনিয়ার বীজগণিত এবং আরও জটিল গণিতে সাধারণত 3 ডি গ্রাফিক্স এবং 3 ডি স্পেস থাকে। তবে আরও 2 টি গেমের মধ্যে আরও গণিত করা যেতে পারে। পদার্থবিদ্যার গণিতটি বেশ শক্ত হয়ে উঠতে পারে এবং আপনি যদি নরম শরীরের পদার্থবিজ্ঞান এবং বি-স্প্লাইন গতিবিদ্যা বিবেচনা করেন (এবং এখনও 2 ডি তে রাখেন, মনে রাখবেন) এটি আরও জটিল হয়ে উঠবে

একটি ফিজিক্স লাইব্রেরি তৈরি বা বিচ্ছিন্ন করার চেষ্টা করুন যা সংঘর্ষের হ্যান্ডলিং এবং সাধারণ 2D আকারের প্রতিক্রিয়াটি কভার করবে। লিনিয়ার বীজগণিত সংঘর্ষের জন্য ট্র্যাজেক্টরি ভেক্টর গণনা করার জন্য বেশ কার্যকর। ডট পণ্যটি ত্রিকোণমিতিতে ব্যবহৃত ইউনিট বৃত্তের সাথে বেশ সম্পর্কিত। তবুও, 3 ডি তে প্রয়োগ করার সময় অনমনীয় শারীরিক পদার্থবিজ্ঞানের জটিলতা তাত্ক্ষণিকভাবে বৃদ্ধি পায়।

থ্রিডি গ্রাফিক্স আপনাকে ম্যাট্রিক্স গণনা, চতুর্ভুজ, লিনিয়ার বীজগণিত এবং কিছু প্রয়োগ ক্যালকুলাসের বৃহত্তর উপলব্ধি দেয়। আপনি সম্ভবত প্রথম যে জিনিসটি গ্রহণ করবেন তা হ'ল মেট্রিকেস ব্যবহার করে 3 ডি স্পেসে অবজেক্টগুলি সরিয়ে নিয়ে যাওয়া ও পরিচালনা করতে।


0

আপনি যদি 2 ডি গেম লিখছেন, আপনি সম্ভবত ইতিমধ্যে লিনিয়ার বীজগণিত ব্যবহার করছেন .. আপনি কেবল এটি জানেন না! সাধারণত ভেক্টর সম্পর্কে কমপক্ষে বেসিকগুলি শিখতে খুব সহজ, তবে অন্যথায় জটিল চলাফেরা সম্পর্কে চিন্তাভাবনা সহজ করে তোলার ক্ষেত্রে অনেক এগিয়ে যায়।

উদাহরণস্বরূপ, বাঁকানো চলাচলের অনুকরণের জন্য কী সমীকরণগুলি ব্যবহার করতে হবে, যেমন একটি কামান থেকে কামানবাল শট, বা একটি হোমিং-মিসাইলের জন্য কী সমীকরণগুলি ব্যবহার করা উচিত সে সম্পর্কে আমরা এখানে প্রচুর প্রশ্ন পেয়েছি। তবে আপনি যদি ভেক্টরগুলি বুঝতে পারেন তবে আপনার কেবলমাত্র "সমীকরণ" হ'ল দুটি ভেক্টরকে একসাথে যুক্ত করার জন্য। কেবল তা-ই নয়, তবে এয়ার-ড্র্যাগ বা ঘর্ষণের মতো জিনিসগুলি যুক্ত করা অবিশ্বাস্যভাবে সহজ হয়ে যায় - কেবল ড্র্যাগ-ভেক্টর গণনা করুন এবং এটি বেগকে যুক্ত করুন। Presto!

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.