সেমি-ফিক্সড বা ফুল-ফিক্সড টাইমস্টেপ?


15

আমি একটি আইফোন শম্পআপ করছি এবং কোন ধরণের গেম লুপ ব্যবহার করব তা সিদ্ধান্ত নেওয়ার চেষ্টা করছি। আমি অর্ধ-স্থির টাইমস্টেপ বা সম্পূর্ণ-স্থির টাইমস্টেপ ব্যবহার করতে চাই।

আধা-স্থির টাইমস্টেপ দিয়ে আমি শূন্য বা আরও বেশি আপডেট (FIXED_INTERVAL) কল করব যার পরে একটি আপডেট (ডিটি) কল হবে যেখানে গেম লুপের জন্য dt <= FIXED_INTERVAL হবে। যেহেতু আমি এটি বুঝতে পারি যে এই পদ্ধতির ত্রুটিগুলি হ'ল আমার পদার্থবিজ্ঞানের আপডেট (ডিটি) যুক্তিটি প্রোগ্রাম করা আরও কঠিন হতে চলেছে কারণ আমাকে প্রতিটি আপডেটের জন্য মূলত একটি পরিবর্তনশীল ডিটি ধরে রাখতে হয়। এবং তারপরে আমি আরও শুনেছি যে প্রতিবার ভাসমান পয়েন্টের মান একই না হওয়ার কারণে আমার গেমের প্রতিটি রান কিছুটা আলাদা হবে।

তারপরে সম্পূর্ণ স্থির টাইমস্টেপ দিয়ে আমি শূন্য বা আরও বেশি আপডেট (FIXED_INTERVAL) কল করছি যার পরে একটি ইন্টারপোলেশন (dt / FIXED_INTERVAL) কল আসে যেখানে গেম লুপের জন্য dt <FIXED_INTERVAL হয়।

সুতরাং দেখে মনে হচ্ছে যে আমার বড় সিদ্ধান্তটি হ'ল: আমি কী একটি পরিবর্তনশীল dt দিয়ে একটি আপডেট (dt) বাস্তবায়নের চ্যালেঞ্জ মোকাবেলা করতে চাই বা আমি কী দ্বিধা প্রয়োগের চ্যালেঞ্জ মোকাবেলা করতে চাই?

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

তাহলে আরও ব্যবহারিক পছন্দ কী: আমার পদার্থবিজ্ঞানের আপডেটগুলি ভেরিয়েবলের সাথে জটিল হয়ে উঠতে পারে তা জেনে আমি কি এটি আধা-স্থির করেছিলাম? বা আমি কী পুরোপুরি স্থির হয়েছি এবং গেম স্টেটের বিমূর্ততা নিয়ে আসার চেষ্টা করি যাতে আমি পূর্ববর্তী অবস্থা এবং বর্তমান অবস্থার উপর নজর রাখতে পারি যাতে অন্তরোলন সম্পাদন করতে পারে?


এখানে বেশ পুঙ্খানুপুঙ্খভাবে আচ্ছাদন করা
সেকশনস

1
আমি সেই আলোচনা এবং লিঙ্কগুলি একাধিকবার পড়েছি। আসলে আমি এই পোস্টে এসেছি। আমার প্রশ্নটির প্রধানত অন্তর্বিচ্ছিন্নতা অর্জনের জন্য কীভাবে গেমের রাজ্যগুলি প্রয়োগ করা যায় - যা এই আলোচনায় মোটেই আচ্ছন্ন নয়।
রায়ান

উত্তর:


12

সম্পূর্ণ স্থির

আপনি যখন প্রতিটি ফ্রেমে একবার ভেরিয়েবল পদক্ষেপে নিক্ষেপ করেন তখন আপনি বেশিরভাগ নির্দিষ্ট সময়সীমার সুবিধাগুলি আলগা করেন।

নোল লোপিস কীভাবে তাঁর গেমস ক্যাসির কন্ট্রাপশনগুলিতে একটি নির্দিষ্ট সময়ের পদক্ষেপটি প্রয়োগ করেছিলেন সে সম্পর্কে দুর্দান্ত লেখায় রয়েছে । আপনার কাছে বোনাস হিসাবে তিনি আইফোন বিকাশকারী, যদিও তার প্রযুক্তিটি আইফোন নির্দিষ্ট নয়।

নিবন্ধ থেকে কিছু হাইলাইট

  • সময় আহরণকারী ব্যবহার করুন।
  • 60Hz ফ্রেমের হারের জন্য 120Hz পদার্থবিজ্ঞানের হার ব্যবহার করুন।
  • ভবিষ্যতে একটি স্থির পদক্ষেপ অনুকরণ করুন এবং বর্তমান পদার্থবিজ্ঞানের রাজ্য এবং ভবিষ্যতের পদার্থবিজ্ঞানের অবস্থার মধ্যে অঙ্কন কোড লার্প করতে সময়ের সাথে সাথে বাম ব্যবহার করুন।
  • বিভিন্ন গোচা

2

আপনি "আধা-স্থির" এবং "সম্পূর্ণ-স্থির" টাইমস্টেপ হিসাবে যা উল্লেখ করেন তা হ'ল আমার মনে, উভয় স্থির টাইমস্টেপ the যে ডিটি আপনি আপনার updateকলটিতে যাচ্ছেন তা ফ্রেমের মধ্যে পরিবর্তন হয় না।

সুতরাং, আপনার প্রশ্নটি আসলে "আমি কি রেন্ডারিংয়ের লক্ষ্যে ইন্টারপোলেশন বাস্তবায়ন করতে চাই?" উত্তর: সম্ভবত না

ইন্টারপোলেশন এমন একটি জিনিস যা আপনি কেবল তখনই করতে চান যদি আপনার স্থির updateটাইমস্টেপটি আপনার টার্গেট renderটাইমস্টেপের চেয়ে আলাদা different এটি এমন গেমগুলির জন্য অস্বাভাবিক নয় যেগুলি updateকেবলমাত্র update10Hz এ ফোন করতে বলা হয়, তবে পুরো ফ্রেমরেটে রেন্ডার করার জন্য কঠোর পর্যায়ে থাকে ।

যেহেতু আপনি একটি আইফোন shmup লিখছেন, আপনার updateবা আপনার renderপ্রয়োজন বিশেষত সিপিইউ নিবিড় নয়; আপনি নিজের ফ্রেমরেটটি সহজেই 30Hz বা 60Hz এ লক করতে পারেন, বাস্তবায়নে বিরক্ত করবেন না এবং এখনও একটি সাবলীল চেহারার খেলা রয়েছে।


আমি পাই না। আপনি বলছেন যে আমি আমার গেম লুপটিতে যে বৃহত ডিটিটি গণনা করতে পারি তা লক করতে পারি - যা আমার পদার্থবিজ্ঞান গ্রাস করে? আমি কেমন করে ঐটি করি? আমি কি এটি CADisplayLink দিয়ে করতে পারি? আমি বলতে চাইছি, আপনি যে% সিপিইউ ব্যবহার করছেন তা ধরে নিচ্ছেন? আপনার কি সত্যিই লক করা গেম লুপ dt ধরে নেওয়া উচিত?
রায়ান

আমি যা বলছি তা সত্যিই এটিকে ফুটিয়ে তোলে: কাজ করতে হবে এমন কমপক্ষে জটিল কাজটি করুন।
ব্লেয়ার হলোয়ে

1
সম্প্রসারণ: এর dtজন্য একটি ভেরিয়েবল ব্যবহার করা updateএবং renderএটি সবচেয়ে সহজ কাজ যা কাজ করে তবে সাধারণত অস্থিরতার জন্য পদার্থবিজ্ঞানের ইঞ্জিনগুলি ব্যবহার করার সময় এড়ানো হয়। অতএব, updateএকটি স্থির সাথে কল dtকরা এবং একই হারে রেন্ডারিং (আপনার updateরান দীর্ঘায়িত হলে ফ্রেমগুলি নামানোর সময়) সাধারণত কাজ করা সবচেয়ে সহজ কাজ। updateকলগুলির মধ্যে অবজেক্টগুলিকে আলাদা করতে কোড লেখা আপনার কোডে জটিলতা যুক্ত করে; জটিলতা যা আপনি কোনও সমস্যা সমাধানের জন্য যুক্ত করছেন adding
ব্লেয়ার হলোয়ে
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.