2 ডি প্ল্যাটফর্মার: পদার্থবিজ্ঞানকে ফ্রেমরেটের উপর নির্ভর করে কেন?


12

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

2 ডি গেম প্রোগ্রামিংয়ের সাথে অভিজ্ঞ যারা গেমটি কেন এভাবে কোড করা হয়েছিল তা বোঝাতে সহায়তা করতে পারে? ধ্রুবক হারে কোনও পদার্থবিজ্ঞানের লুপটি কি আরও ভাল সমাধান হতে পারে না? (প্রকৃতপক্ষে, আমি মনে করি গেমের অংশগুলির জন্য একটি পদার্থবিজ্ঞানের লুপ ব্যবহৃত হয়েছে, যেহেতু কিছু সত্তা ফ্রেমেট নির্বিশেষে স্বাভাবিকভাবে চলতে থাকে the অন্যদিকে, আপনার চরিত্রটি ঠিক ঠিক [fps / 60] হিসাবে দ্রুত চালায়))

এই বাস্তবায়ন সম্পর্কে যা আমাকে বিরক্ত করে তা হ'ল গেম ইঞ্জিন এবং গ্রাফিক্স রেন্ডারিংয়ের মধ্যে বিমূর্ততা হ্রাস, যা মনিটর, গ্রাফিক্স কার্ড এবং সিপিইউয়ের মতো সিস্টেম-নির্দিষ্ট জিনিসের উপর নির্ভর করে। যদি কোনও কারণেই না হয়, আপনার কম্পিউটারটি vsync পরিচালনা করতে না পারে, বা ঠিক 60fps এ গেমটি চালাতে না পারে, এটি দর্শনীয়ভাবে ভেঙে যাবে। রেন্ডারিং পদক্ষেপটি কোনওভাবেই পদার্থবিজ্ঞানের গণনাগুলিকে প্রভাবিত করবে? (আজকাল বেশিরভাগ গেমগুলি হয় গেমটি ধীর করে দেয় বা ফ্রেমগুলি এড়িয়ে চলে) এটি কেন, এবং ফ্রেমরেট নির্ভরতা না রেখে সেই শিরাতে প্যাটফর্মার তৈরি করা সম্ভব হবে কি? আপনি যদি বাকী ইঞ্জিন থেকে গ্রাফিক্স রেন্ডারিংকে আলাদা করেন তবে অদৃশ্যভাবে নির্ভুলতা হারাতে হবে?

আপনাকে ধন্যবাদ, এবং দুঃখিত যদি প্রশ্নটি বিভ্রান্তিকর হয়।


আপনার প্রশ্নের স্পর্শকাতর। এখানে একটি দুর্দান্ত নিবন্ধ যা আপনার বর্ণনা করছেন ঠিক সেই সমস্যাগুলি এবং টাইমস্টেপগুলি এবং ফ্রেম-হারগুলি হ্যান্ডেল করার "সঠিক" উপায় covers gafferongames.com/game-physics/fix-your-timestep
num1

এটি সত্যই আমাকে বিস্মিত করেছে যে তারা এইভাবে এটি করবে। আমি মনে করি এটি অবশ্যই হবে কারণ এটি মূলত কনসোলের জন্য নির্মিত হয়েছিল, যেখানে ফ্রেমের হার নির্ভর করা যেতে পারে। হতাশাজনক!
আয়ান

উত্তর:


7

কেন?

মুষ্টিমেয় কারণে, আপনার বাছাই করুন: তারা আরও ভাল জানেন না। .এটি দ্রুত এবং কার্যকর করা সহজ easier তারা গেমপ্লেতে বেশি মনোনিবেশ করেছিল এবং প্রান্তের ক্ষেত্রে কম ছিল যা বেশিরভাগ ক্ষেত্রেই না কাটতে পারে।

আপনি কেন না তা ব্যাখ্যা করার জন্য বেশ ভাল কাজ করেছেন। আমি নিশ্চিত যে আপনি লক্ষ্য করেছেন যে বিষয়গুলি কভার করে প্রচুর বিষয় রয়েছে । আমি নিশ্চিত নই যে আমার তালিকাভুক্ত উত্তরগুলির বাইরে আপনি একটি সন্তোষজনক উত্তর খুঁজে পাবেন।


"তারা এর চেয়ে ভাল আর কিছু জানত না" বর্ণনা করে যে আমি "জ্যাক একটি মূর্খ" এর সাথে কেন এই পদ্ধতি গ্রহণ করেছি। তবে - আমি আমার সমস্ত যুক্তি দিয়ে শেষ ফ্রেমের পর থেকে ডিটি কল করার উপর অনেক বেশি নির্ভর করেছি। কিন্তু - ফ্লোটিং পয়েন্ট স্থানাঙ্ক সঙ্গে, এটা কিছু অদ্ভুত চাই, প্রতিলিপি বাগ হতে পারে হার্ড
lochok

4

এসএমবিটি মূলত একটি কনসোল খেলা যেখানে এটি ধরে নেওয়া নিরাপদ যে এটি সমস্ত Xbox360s এ 60fps এ চালাতে সক্ষম হয়েছে (ভাল, কিছু পল খেলোয়াড়ের জন্য সম্ভবত 50)। একটি স্থির টাইমস্টেপ ধরে নেওয়া কোডটিকে মোটামুটি সহজ করে।

একটি পরিবর্তনশীল টাইমস্টেপ - 'পস + = বেগ * টাইমস্টেপ' দ্বারা প্রচুর পরিমাণে স্কেল করা সহজ, আপনি যখন ত্বরণ এবং ত্বরণ পরিবর্তনের হারগুলি নিয়ে কাজ করছেন তখন সঠিকভাবে এটি করা বেশ জটিল হয়ে ওঠে।

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

কোনও স্থির স্ক্রিন রেজোলিউশনের পাশাপাশি কোনও নির্দিষ্ট ফ্রেমরেটের জন্যও ডিজাইন করার সময়, স্ক্রোলিংটিকে অতিরিক্ত মসৃণ করতে আপনি আরও একটি জিনিস করতে পারেন। আপনি নিশ্চিত করতে পারেন যে গেমটি প্রতি ফ্রেমে পুরো পিক্সেল-পিক্সেল-এ স্ক্রোল করে - কোনও ফ্রেম প্রতি ভগ্নাংশের পিক্সেলের সংখ্যাসূচক স্ক্রোল করে আপনি যে কোনও 'সাবপিক্সেল ডাবল' পেতে পারেন তা এড়িয়ে চলে।


1

সুস্পষ্ট সমাধানটি হল সমান্তরালভাবে 2 টি লুপ চলমান - প্রতি সেকেন্ডের প্রতি 1/60 এবং রেকর্ডিং প্রতি সেকেন্ডের প্রতি 1/60 গেম লুপ।

তবে ফ্ল্যাশ-এ আমার অভিজ্ঞতা (এএস 3, যা আমি নিশ্চিত যে সুপার মাংস বয়টি তৈরি হয়েছিল), শিডিয়ুলারটি সবসময় খুব নির্ভুল হয় না। নির্ভুলতা পরিবেশের উপরও নির্ভর করে। একা স্ট্যান্ড ফ্ল্যাশ প্লেয়ারে এটির সাব-মিলিসেকেন্ড রেজোলিউশন থাকতে পারে। কিন্তু যখন কিছু ওয়েব ব্রাউজারে চালানো হয় তখন এটি যথার্থতা ফ্রেম হারের হয়ে যায়।

সুতরাং আপনি রেন্ডারিং এবং গেম লজিক লুপগুলি ডিকপলিংয়ের নিকটতম উপায়টি হ'ল সমস্ত গতিবিধি সময় ভিত্তিক হতে হবে (এবং প্রতিটি ফ্রেমটি শেষ ফ্রেমের পরে কতটা সময় কেটে গেছে তার উপর ভিত্তি করে চালান)। এটি আরও কিছু জটিল গণিতের সূচনা করতে পারে (যেমন মহাকর্ষের ধারাবাহিকতায় কোনও বস্তুর বেগ যোগ করার পরিবর্তে ধারাবাহিকভাবে প্রয়োগ করা উচিত)। গেমটি এক সেকেন্ডের জন্য পিছিয়ে থাকতে পারে এবং তারপরে আপনার প্লেয়ারটি এক ধাপে 200 পিক্সেল সরানো হবে, সংঘর্ষ সনাক্তকরণ এবং প্রতিক্রিয়া আরও জটিল হয়ে উঠতে পারে। প্রোগ্রামার যদি ফ্রেম ভিত্তিক সংঘর্ষ সনাক্তকরণ (প্রতিটি টাইমস্টেপের সংঘর্ষের জন্য পরীক্ষা করা) করছিল তবে তাদের সময় ভিত্তিক সংঘর্ষ সনাক্তকরণেও স্যুইচ করতে হবে। এবং যদি তারা এটি প্রাকৃতিক বোধ করতে চায় তবে তাদের উপরে বর্ণিত মাধ্যাকর্ষণ পদ্ধতিটি ব্যবহার করতে হবে, যার ফলে বস্তুর চলাচলকে একটি বক্ররেখা হতে পারে (একটি লাইনের বিপরীতে),


2
আসল মাংস বয় একটি ফ্ল্যাশ খেলা ছিল। সুপার মিট বয় একটি সি ++ খেলা।
আর্চাগন

0

আমি আর 60fps এ 2 ডি পিসি গেমস খেলতে চাই না বলে মনে করি না। এমনকি বেশিরভাগ 2 ডি গেমগুলি এখন হার্ডওয়্যারকে ত্বরান্বিত করা হয়েছে তাই ব্যক্তিগতভাবে আমি এফপিএস প্রয়োজনীয়তা নিয়ে চিন্তা করব না।

আসল প্রশ্নটি হল আপনি কেন পিক্সেল ভিত্তিক ব্যবহার করবেন না, গেমগুলি চিট এবং শর্টকাট পূর্ণ।

যদি আপনি কোনও পদার্থবিজ্ঞান ভিত্তিক গেমটি তৈরি করে থাকেন (তবে পাখি নিক্ষেপ করছেন?) উত্তরটি সুস্পষ্ট, তবে একটি সুপার মারিও ক্লোন? সময় ভিত্তিক চলাচল কিছুটা হতে পারে।


এগুলি 60fps এ খেলানো শক্ত নয়, তবে 50Hz, 70-85Hz এবং 120Hz এর দেশী রিফ্রেশ রেটগুলির সাথে প্রদর্শনগুলি এখনও সহজেই পাওয়া যায়।

0

তারা যে 2 ডি পদার্থবিজ্ঞান ব্যবহার করছে তাতে অদ্ভুত আচরণ এড়াতে?

সত্যিই আমি অনুমান করতে পারি। আমি একটি ব্যাখ্যা চেষ্টা করব:

গেমের কেন্দ্রবিন্দুতে মূল গেম লুপ। যা মূলত: এর মতো দেখাচ্ছে

while(gameRunning)
{
  updateGame(timestep);
  renderGame(timestep);
}

আপডেট গেম গেমস্টেট আপডেট করে: প্লেয়ার ইনপুট চেক করে, গেমের জগতে প্লেয়ার ইনপুট প্রয়োগ করে এবং পদার্থবিজ্ঞানের সিমুলেশন ইত্যাদি চালায়

রেন্ডারগেমটি খেলাটি আঁকতে এবং অ্যানিমেট করে।

এই দম্পতিরা পদার্থবিজ্ঞানের রেন্ডারিংয়ে আপডেট করে। আপনি যদি এটি ডিকুয়াল করতে চান তবে আপনার থ্রেডগুলি ব্যবহার করতে হবে এবং রেন্ডারিংয়ের প্রতিটি ডেটা অ্যাক্সেস এবং গেমআপডেট থ্রেডটি সঠিকভাবে ভাগ করা ডেটা যেমন প্লেয়ারের অবস্থানের সাথে সংহত করতে হবে। এটি করা যেতে পারে।

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

একটি নিষ্পাপ পদ্ধতি হবে (যা আমি আমার গেমটিতে * দীর্ঘশ্বাস * ব্যবহার করছি):

position=position+speed*timestep;
speed=speed+acceleration*timestep;

এটাকে অয়লার একীকরণ বলা হয় এবং সাধারণত এটি একটি খারাপ ধারণা হিসাবে বিবেচিত হয়। টাইমস্টেপটি যদি কোনও না-ধ্রুব গণনা ত্রুটি হয় যা সিমুলেশনটি কম স্থিতিশীল করে তুলবে। অবজেক্ট অতিরিক্ত গতিতে চলতে পারে বা না সমস্তই পর্দার বাইরে দেয়াল দিয়ে উড়ে যেতে পারে। টাইমস্টেপ ধ্রুবক হলেও Euler ইন্টিগ্রেশন ছোটখাট গণনার ত্রুটি ঘটায়। আরকে 4 এর মতো আরেকটি সংহতকরণ পদ্ধতি ব্যবহার করা ভাল বা পদার্থবিজ্ঞানের ইঞ্জিন ব্যবহার করা ভাল।

এ ছাড়া টাইমস্টেপটি খুব বড় হয়ে গেলে সংঘর্ষ সনাক্তকরণে সমস্যা হতে পারে। যেহেতু দুটি গেমআপডেটের মধ্যে সংঘর্ষগুলি পরীক্ষা করা হয় না, তাই বস্তুগুলি বাধার মধ্য দিয়ে যেতে পারে।

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