একটি 2 ডি গেমটিতে ক্যামেরা / ভিউপোর্ট বাস্তবায়ন করা হচ্ছে


21

2 ডি-গেমটিতে ক্যামেরা / ভিউপোর্ট বাস্তবায়নের সর্বাধিক ব্যবহারিক উপায় কী?

আমি পড়েছি, আমার পর্দার তুলনায় অবস্থানের পরিবর্তে অবজেক্ট ওয়ার্ল্ড পজিশনটি সংরক্ষণ করা উচিত ?

বর্তমান পরিস্থিতি:

আমি একটি সাধারণ 2 ডি-গেম বাস্তবায়ন করেছি যেখানে আমি এক্সএমএল-ফাইলগুলি থেকে বস্তু এবং স্তরগুলি লোড করি। বর্তমানে স্তরটির এক্সএমএল-ফাইলটি এর মতো দেখাচ্ছে:

<map>
   <tile obj="ground" x="0" y="555" />
   <tile obj="ground" x="16" y="555" />
   <tile obj="ground" x="32" y="555" />
   ...
</map>

সমস্ত অবজেক্টের একটি 2 ডি-ভেক্টর রয়েছে "অবস্থান" স্ক্রিনে তাদের বর্তমান অবস্থান সংরক্ষণ করে।

আমি এটি হতে চাই কি:

ভিউপোর্ট / গেমওয়ার্ল্ড চিত্রণ

ছবিতে:

  • ক্যামেরা হয় 800x600 বা 640x480
  • ব্লক এবং স্প্রিটগুলি 16x16 পিক্সেল।
  • বিশ্বের আকার পৃথক হতে পারে
  • স্থানাঙ্কগুলি সম্ভবত পর্দার সাথে নয়, বিশ্বের তুলনায় স্বাভাবিক করা উচিত?
  • প্লেয়ারের এক্স, ওয়াইয়ের তুলনায় ভিউপোর্টের অবস্থান এবং প্লেয়ার যখন ক্যামেরা ডেড জোনে পৌঁছে যায় তখন ( এই ভিডিওর মতো ) moves

আমি সিউডোর উদাহরণ / নিবন্ধগুলি জিজ্ঞাসা করছি, তবে আপনার যদি বিকাশের জন্য আমি কী ব্যবহার করছি তা জানতে প্রয়োজন: এসডিএল এবং সি / সি ++।


1
মন্তব্যগুলিতে আপনার তৃতীয় লিঙ্কটি এখানে যুক্ত করুন এবং আমি এটি আপনার প্রশ্নের সাথে যুক্ত করতে পারি।
মাইকেলহাউস

ক্যামেরা ডেড জোনটি দিয়ে আমি যা বোঝাতে চেয়েছি তা এখানে: youtube.com/watch?v=89TRXUm8jMI
নীলকিরাই


হ্যালো @ আর্থার ওল্ফ হোয়াইট, বিস্তৃত করার যত্ন নিচ্ছেন? ধন্যবাদ।
নীলকিরাই

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

উত্তর:


20

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

ক্যামেরাটি "দেখতে" পারে এমন বস্তুগুলি আঁকার জন্য আপনাকে অবশ্যই ক্যামেরাটির বিশ্বের স্থানাঙ্কের তুলনায় সমস্ত বস্তু আঁকতে হবে। ক্যামেরার সাথে সম্পর্কিত কোনও বস্তুর স্ক্রীন অবস্থান গণনা করতে, সহজভাবে এটি করুন:

int screenX, screenY; //screen position of the object being drawn

screenX = object.x-camera.x;
screenY = object.y-camera.y;

স্পষ্টতই কিছু কিছু সামগ্রী ক্যামেরায় দৃশ্যমান নয়, সুতরাং আপনি একটি ভিউ কুলিং সিস্টেমটি প্রয়োগ করতে চাইতে পারেন।


2

ওয়ার্ল্ড অ্যান্ড ভিউ ম্যাট্রিকেস ব্যবহার করে জিপিইউতে এগুলি করা ভাল, আপনি সিপিইউতে কোথায় কী জিনিসগুলি আঁকেন তা পরিবর্তন করে নয়

এইভাবে, আপনি ক্যামেরাটি নির্বিচারে পরিবর্তন করতে পারেন (এমনকি এটি জুম ইন এবং আউট আউট!) এবং এটি কেবল যাদুতে কাজ করবে। ড্রয়ের সময় সাশ্রয় করতে আপনি এখনও ভিউ কুলিং পাশাপাশি করতে পারেন। এবং বিশ্বটি আঁকার জন্য আপনার কোডগুলির কোনওটিরই পরিবর্তন এবং আর পরিবর্তন করা হবে না আপনি ভিউ এবং ওয়ার্ল্ড ম্যাট্রিক্স সঠিকভাবে সেটআপ করার পরে।

এসডিএলে আপনি সম্ভবত কেবল ওপেনজিএল কলগুলিকে ইনলাইন করতে পারেন যেমন glOrthoএবং glTranslate

এই থ্রেড দেখুন ।


কেউ কি ডাউনটোটকে ব্যাখ্যা করতে পারে? এইবার বুঝতে পারছি.
হ্যালো ওয়ার্ল্ড

1
আমি ভোট-ভোট করিনি, তবে আমি মনে করি কারণ এটি এমনকি প্রশ্নের উত্তর দেয় না। প্রশ্নটি কোনও জিপিউ বনাম সিপিইউতে করা আরও দক্ষ বা সহজ কিনা তা নয়, কোনও কিছুর গণনা কীভাবে করা যায় about ওপি এমনকি এমনকী তিনি ছদ্ম উদাহরণগুলির সন্ধান করছেন বলেও জানিয়েছেন। ক্যামেরা / ওয়ার্ল্ড / মডেল ম্যাট্রিক্সের সংমিশ্রণটি আরও দক্ষ হবে বলে কোনও সন্দেহ নেই, তাই mklingen এর একটি বিন্দু অন্তত রয়েছে।
ড্যান ওয়াটকিন্স

এই উত্তরটি মোটেও খারাপ নয়! এটি ওপেনজিএল / ডিএক্স বিকাশের জন্য আরও সুনির্দিষ্ট, তবে এটির সঠিক পন্থা হিসাবে আপনি কেবল ক্যামেরা কোরগুলির উপর ভিত্তি করে একটি অনুবাদ ম্যাট্রিক্স গণনা করতে পারেন এবং তাদের প্রকৃত অবস্থান পরিবর্তন না করেই ক্যাম ম্যাট্রিক্সের মাধ্যমে অবজেক্টগুলি সরিয়ে নিতে পারেন।
nenchev
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.