"গেম লজিক কোড" কী?


50

আমি সি # / এক্সএনএ ব্যবহার করছি এবং ড্র কোডের সাথে আপডেট কোডটি না মিশানোর জন্য বেশ কয়েকবার বলা হয়েছে - এবং আমি নিশ্চিত যে আমি নই! তবে কেউ দয়া করে 'লজিক কোড' কী তা বর্ণনা করতে পারেন?

যেমনটি এখানে দেখা হয়েছে: http://blogs.msdn.com/b/shawnhar/archive/2007/07/25/ বোঝা- গেমটাইম.এএসপিএক্স

[...] নিশ্চিত হয়ে নিন যে আপনি আপনার সমস্ত গেমের যুক্তি আপডেট পদ্ধতির (অঙ্কনে নয়!) ভিতরে রেখেছেন এবং সবকিছু দুর্দান্ত ধ্রুবক গতিতে চলবে।

আমি এগুলি জিজ্ঞাসা করছি যেহেতু আমার গতির গতি এফপিএসের তুলনায় ওঠানামা করছে। ধীর এফপিএস ধীর গতিশীল বস্তু এবং ভিসার বিপরীতে সমান। এবং হ্যাঁ, আমি প্রত্যাশিত position += speed * (float)gt.ElapsedGameTime.TotalSeconds;কোডটি অন্তর্ভুক্ত করছি ।

এটি সম্ভবত একটি বড় উপদ্রবমূলক প্রশ্ন, তবে আমি এর সংজ্ঞাটি সম্পর্কে একেবারে পরিষ্কার হতে চাই।


আমার মনে হয় আপনি বোঝানো position = speed * ...TotalSeconds। খেয়াল করুন এটি =না +=। এটি যদি +=আপনি যেমন টাইপ করেন ঠিক তেমন হয়, তবে আপনার অবস্থান প্রায় তাত্ক্ষণিকভাবে পর্দার বাইরে উড়ে যাবে।
DrZ214

আমার কাছে এমন কোড রয়েছে যা দেখতে দেখতে 'পজিশন + = দিকনির্দেশ * গতি * ... টোটাল সেকেন্ডস' এর মতো এবং এটি খুব ভালভাবে কাজ করে। আমি কিছু ভুল টাইপ করেছি, তবে অবস্থান = গতি এটি প্রতিটি আপডেট বরাদ্দ করে। আপনার উপায় কাজ করতে পারে, কিন্তু আমার কোডটি এভাবে কাজ করে। (দ্রষ্টব্য যে দিকটি স্বাভাবিক করা হয়েছে)
শাই গাই

আমি ভেবেছিলাম gt.ElapsedGameTime.TotalSecondsপ্রোগ্রামটি (গেম) শুরু করা থেকে কেটে যাওয়া সেকেন্ডের সংখ্যা। যদি আপনি এটির দ্বারা আপনার গতি বৃদ্ধি করে থাকেন, তবে 5 সেকেন্ড বাজানোর পরে, আপনার গতি 5 গুণ বেশি গতিবেগ হবে (বিশেষ ক্ষেত্রে যেখানে গতি 0 তে সেট করা আছে) ব্যতীত। আপনার আর কী থাকতে পারে তা নিশ্চিত নয় যে এটি অসত্য তৈরি করতে পারে তবে আমি আগ্রহী।
DrZ214

1
আহা, এটা শেষ আপডেটের পরে। গেমদেব.স্ট্যাকেক্সেঞ্জঞ্জ
প্রশ্নগুলি /

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

উত্তর:


102

এটি কি আপনার গেম বিশ্বের অবস্থা পরিবর্তন করে? এটি লজিক কোড।

এটি খেলা বিশ্বের অবস্থা প্রদর্শন করে? এটি রেন্ডারিং কোড।


আমি আমার কোডটি 100% নির্দিষ্ট হতে চাই nce ভাল ব্যাখ্যা, ধন্যবাদ।
শাই গাই

38
এটি কি ইনপুট পরিচালনা করে? এটির নিয়ামক কোড। যুক্তি থেকে নিয়ন্ত্রণ পৃথক করুন, যাতে আপনি বিভিন্ন ধরণের নিয়ন্ত্রণের সাথে একই যুক্তি ব্যবহার করতে পারেন। উদাহরণস্বরূপ একটি এফপিএসআইপুট কনট্রোলার + ক্যারেক্টারমোটর বনাম এআইআইএনপুট কনট্রোলার + ক্যারেক্টারমোটর বনাম নেটওয়ার্কপুট ইনপুট নিয়ন্ত্রণকারী (উদাহরণস্বরূপ মাল্টিপ্লেয়ারের অন্যান্য খেলোয়াড়) + ক্যারেক্টারমোটর। মোটর (লজিক কোড) এটি যেভাবে নির্দেশনা দেয় তা কীভাবে তা পাত্তা দেয় না, কেবল তাদের সরবরাহ করা হয় (এই ধরণের ডিকপলিং খেলোয়াড় থেকে এআই বটে সহজেই স্থানান্তরিত করতে দেয় (বাম 4 মৃত এবং নিষ্ক্রিয় খেলোয়াড় ভাবেন)) এবং পিছনে, অন্যান্য বিষয়ের মধ্যে).
ড্রাকো 18

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

এগুলি পৃথক রাখা আপনার প্রয়োজনীয়তাগুলি যখন তারা স্ট্রেনের উত্স হতে শুরু করে তখন পরিচালনা করতে সহায়তা করবে।
কর্ন

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

24

আপনার বিচ্ছেদ সঠিক যদি:

  • আপডেট () তে কোনও আন্তঃবিহীন কল ছাড়াই টানা একাধিকবার কল (অঙ্কন) করা কখনই কলগুলির মধ্যে কোনও দৃশ্যমান পরিবর্তন হতে পারে না।
  • আঁকায় আন্তঃবিযুক্ত কল ছাড়াই টানা একাধিকবার কল (আপডেট) করা কলটি স্ক্রিনটি বন্ধ করে দেওয়া খেলাটি খেলার মতো হবে: সবকিছু নিখুঁতভাবে এবং ধারাবাহিকভাবে চলে, আপনি কেবল এটি দেখতে পাচ্ছেন না।

5
যথাযথভাবে লিখিত সময়গুলি Draw()বিভিন্ন চিত্র আঁকতে পারে draw উদাহরণস্বরূপ, অ্যানিমেটেড স্প্রাইটের ফ্রেমগুলি পরিবর্তন অবিরত থাকতে পারে। এছাড়াও, যদি রেন্ডারিং কোডটি একটি সাধারণ কৌশল ব্যবহার করে এবং velocity * time since last update / period of updateবস্তুর দৃশ্যমান অবস্থানে যোগ করে (তবে তাদের আসল অবস্থানটি অপরিবর্তিত থাকে) তবে অবজেক্টগুলি চাক্ষুষভাবে এগিয়ে যেতে পারে।
হলিব্ল্যাকগেট

2
iffমানে যদি-ও-যদি-তবেই?
বালিনকিংঅফমোরিয়া

3
@ হলি ব্ল্যাকগ্যাট: এটি তর্কযোগ্য। আমি গ্রাফিক্স থামতে চাইলে কী হবে? যদি অ্যানিমেশনের ফ্রেমগুলি গেমটিকে প্রভাবিত করে (হিটবক্সগুলিতে অনুরূপ আক্রমণ অ্যানিমেশনগুলি)? ভিজ্যুয়াল প্রবৃদ্ধিটি এখনও বোঝায় যে "সময়" (যেমন গেমের বদ্বীপের সময়টি) কেটে যাচ্ছে, কিন্তু যদি সময়টি অতিক্রান্ত হয় এবং আপনি যখন প্রবেশ করছেন না Updateতখন আর কী সিঙ্ক থেকে বেরিয়ে যাচ্ছে? প্লেয়ার ইনপুটগুলি মিস করা হচ্ছে, নেটওয়ার্ক ইভেন্টগুলি প্রক্রিয়াজাত হচ্ছে না, ইত্যাদি? গেমটি একটি ঘড়ির বাইরে চালিত করা উচিত, সেই ঘড়ি থেকে প্রাপ্ত গেম যুক্তি বা পদার্থবিজ্ঞানের জন্য স্থির "টিক্স" সহ এবং একই ঘড়ির সাহায্যে চালিত গ্রাফিক্সের অবস্থা।
শান মিডলডিচ

@ সানমিডলিচ আমি সম্মত, প্রায় সবসময় আপনি Draw()এমনভাবে লিখতে পারেন যাতে পর পর বেশ কয়েকবার ডাকা হয়ে গেলে এটি সর্বদা একই চিত্র আঁকেন। সম্ভব হলে এটি করা উচিত। তবে এমন কেস রয়েছে যখন আপনি জানতেন না কখন কী ফ্রিকোয়েন্সি Draw()বলা হবে। উদাহরণস্বরূপ, আপনি যদি নতুন 120hz মনিটরের জন্য পূর্ণ সমর্থন (প্রকৃত 120 এফপিএস) চান এবং আপনি ভিসিএনসি চালু করেন। What if I want to pause graphics?তারপরে আপনি প্রকৃত ব-দ্বীপের সময় 0 এর পরিবর্তে 0 দিয়ে যান Draw()
হলিব্ল্যাকগেট

2
@ হোলিব্ল্যাকগ্যাট: আমি যে কিছুই পাচ্ছিলাম তা 120hz রেন্ডারিংয়ের ব্যবহারকে বিরত রাখবে না। আমি একেবারে একটি নির্দিষ্ট অঙ্কের হারের প্রস্তাব দিচ্ছিলাম না; এটা ঠিক অপেশাদার। একটি গ্লোবাল গেম ক্লক থাকতে হবে যার ডেল্টা ফ্রেম সরবরাহকারী ফ্রেমের ক্ষেত্রে পরিমাপ করা হয় যা স্থির-হারের গেম যুক্তির টিকের জন্য সংশ্লেষ মানকে ফিড করে। সেই গ্লোবাল ক্লকটি ইন্টারপোলেশন সহ গ্রাফিক্স চালায়। আপনি ঘড়ির স্কেল সেট করে গ্রাফিকগুলি বিরতি দিতে পারেন 0। আপনার হায়ারারিকিকাল ক্লক থাকতে পারে তাই যেমন ইউআই এখনও চালায় এবং অ্যানিম্যাট করে যখন অক্ষর অন্তরঙ্গতা খুব সহজেই বন্ধ হয়ে যায়।
শান মিডলডিচ

7

এখানে পয়েন্টটি হ'ল মডেল জিনিসগুলিকে আলাদা করা যা মডেল নয়।

গেম লজিক হ'ল মডেল Model

এগুলি সমস্ত সম্পর্কিত, সম্পর্কিত, সফ্টওয়্যার আর্কিটেকচার নিদর্শন। তবে সমস্ত ক্ষেত্রে মডেল একই জিনিস এটি আসল যুক্তি এবং আসল রাষ্ট্র state

ব্যবসায়ের সফটওয়্যার তৈরি করার সময় এটিকে কখনও কখনও ব্যবসায় যুক্তি বলা হয় এবং ব্যবসায়ের কিছু নীতি এনকোড করে। উদাহরণস্বরূপ, যদি আপনি কোনও ব্যাংকের জন্য কিছু কোডিং করছেন, ক্রেডিট কার্ডের বিলগুলি গণনা করছেন, তবে কার্যকারিতা যদি কাউকে 30 দিনেরও কম সময়ে debtণ পরিশোধ করে দেয় তবে তাকে সুদ পরিশোধ করতে হবে না, এটি ব্যবসায়ের যুক্তির অংশ, এটি এতে বাস করে মডেল. এটি উদাহরণস্বরূপ প্রদর্শিত স্তরগুলির মধ্যে একটিতে লাইভ করে না। একটি বিল মুদ্রণের জন্য কোড, উদাহরণস্বরূপ, তাদের ক্রিয়াগুলির উপর ভিত্তি করে পাঠ্য সম্পাদনা করে না। এই উদাহরণটি সম্ভবত হাইলাইট করে যে আপনি কেন নিজের কোডটি সেভাবে সাজাতে চাইতে পারেন।

গেম যুক্তি হিসাবে একই রকম।

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

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

গেম যুক্তি হ'ল এমন জিনিস যা কখনই পরিবর্তিত হয় না, ফর্ম যাই হোক না কেন।

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