2 ডি গেমের জন্য মানচিত্র তৈরির সেরা উপায়?


16

আমি সাবজেক্টিভ "সেরা" কীওয়ার্ডের জন্য ক্ষমা চাইছি।

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

আমাদের প্রথম প্ররোচনাটি ছিল প্লেয়ারের চারপাশে একটি বৃহত্তর মানচিত্র এবং একটি বৃত্ত তৈরি করা যেখানে সামগ্রী লোড হবে। আমরা অনুভব করেছি যে এটি দীর্ঘকাল ধরে থাকবে না এবং মানচিত্রটিকে বিভাগগুলিতে বিভক্ত করার সিদ্ধান্ত নিয়েছে। প্রথমে আমাদের চারটি বড় বিভাগ ছিল, তবে বুঝতে পেরেছিলাম যে আমরা এটিকে কেবল ছোট ছোট কয়েকটি ভাগে বিভক্ত করতে পারি।

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

আজ, তিনি আমাকে বলেছিলেন যে তিনি একটি সহজ 2D অ্যারে মানচিত্র [প্রশস্ত] [উচ্চতা] তৈরি করতে চেয়েছিলেন যাতে গেমের প্রতিটি গ্রিডের ডেটা থাকে এবং আমাদের প্রয়োজন নেই এমন ডেটার জন্য ধ্রুবক সেভ টু ডিস্ক অপারেশন।

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


আপনি কোন মেশিন ব্যবহার করছেন?
ডেভিড তিতেরেঙ্কো

সি ++ সহ উইন্ডোজ এখন পর্যন্ত এসএফএমএল ব্যবহার করছে (এসএফএমএল পরিবর্তনের সাপেক্ষে; সি ++ নয়)। আমরা পোর্টেবিলিটি এটিএমের জন্য লক্ষ্য রাখছি না।
IAE

2
আপনি যদি NES- এ পুরানো-স্কুল জেল্ডার জন্য যাচ্ছেন তবে কেবলমাত্র 1-স্ক্রিনের মানচিত্র ব্যবহার করা হয়েছে। ছোট মানচিত্র খেলোয়াড়দের তাদের অভিপ্রায়ের ক্ষেত্রকে কেন্দ্রীভূত করতে সহায়তা করে (অর্থাত্ একটি অন্ধকারে, আপনি কেবল আপনার ঘরের সাথে কাজ করছেন di ডায়াবলোতে, দানবগুলি উপরে এবং নীচে মেঝে সরেনি) এবং যদি তারা পুরো অঞ্চলটি অনুসন্ধান করে থাকে তবে তাদের সমাপ্তি বোধ করতে দেয় allow এফএলআউট 3 এবং ওলিভিওনের মতো ওপেন স্পেস গেমগুলি আপনাকে দেয় না।
স্টিফেন ফুরলানি

উত্তর:


27

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

আপনার যদি সত্যিই বিশাল বিশ্ব থাকে তবে সর্বাধিক শক্তিশালী সমাধান হ'ল মানচিত্রের অংশগুলি ব্যবহার করুন। আপনার বিশ্বকে স্থির আকারের অংশগুলিতে বিভক্ত করুন (বলুন, 64x64) 64 কমপক্ষে একটি খণ্ডটি সমস্ত দিক থেকে বোঝা রেখে (যেমন প্লেয়ারের মধ্যে থাকা অংশটি এবং তার সমস্ত প্রতিবেশী) লোড রাখার সাথে সাথে খেলোয়াড়গুলি ঘুরে বেড়ায়-

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


6
কিছু উদাহরণস্বরূপ গণিত: টাইল * এর 10 এমবি আপনাকে পাশের 1619 টাইল সহ একটি স্কোয়ার দেয়। আসল জেল্ডার মানচিত্রগুলি দীর্ঘ পাশের 256 টাইল এবং সংক্ষিপ্ত দিকের অর্ধেকেরও কম ছিল - সুতরাং আপনার মানচিত্রটি সেই স্মৃতি ব্যবহারের সাথে প্রথম জেল্ডার তুলনায় 36x এর বেশি বড় হতে পারে। আপনি কি সত্যিই এত বেশি সামগ্রী তৈরি করতে প্রস্তুত ? (নং)

@ user744 এই মন্তব্যটি অবিশ্বাস্যভাবে বিভ্রান্তিকর। একটি মানচিত্র তৈরি করতে আপনার কেবল টাইলসের চেয়ে বেশি পয়েন্টার প্রয়োজন। টাইলগুলির পাশাপাশি আপনার সেই ডেটা সংরক্ষণ করতে হবে। প্রতিটি 2 ডি গেমের পূর্বনির্ধারিত স্থির টাইলগুলির একটি নির্দিষ্ট পরিমাণ থাকে না।
জেরোইন

5

ব্যক্তিগতভাবে, আমি টাইলএডের মতো একটি নির্ধারিত টাইল-সম্পাদক ব্যবহার করে মানচিত্রটি তৈরি করব । এই পদ্ধতির বিভিন্ন সুবিধা পাওয়া যায়:

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

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

স্ক্রিনে টাইলস ব্লিট করা সম্ভবত আপনার মানচিত্রটি রেন্ডার করার দ্রুততম উপায়। আমি এসএফএমএল জানি না, তবে তাদের সাইটের ডক্স থেকে আপনার Spriteক্লাসটি সন্ধান করা উচিত বা শ্রেণীর Copyফাংশনটি ব্যবহার করা উচিত Image

আপডেট: আমি কেবলমাত্র এসএফএমএল কিছু ডক্স পড়েছি এবং আপনার অবশ্যই সম্পাদনার প্রয়োজনে চিত্রগুলি ব্যবহারের পরিবর্তে Drawableবা ব্যবহার করা উচিত use Spriteসম্ভবত সেখানে একটি টাইল্ড এসএফএমএল লোডার রয়েছে er এটি সম্ভবত কিছু দ্রুত ও দ্রুত চলার ভাল উপায়।


1

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


0

স্বতন্ত্র টাইলসের 2D অ্যারে ব্যবহার করা আমার মতে সেরা। আপনার সম্পূর্ণ বৃহত মানচিত্রটি একটি 2 ডি অ্যারে হিসাবে থাকতে পারে এবং কেবলমাত্র সেই অংশটি আঁকতে হবে যে কোনও সময় প্রদর্শিত হবে। নীচে তাবেগোস (tbgs.js) এইচটিএমএল 5 গেম লাইব্রেরি সহ 2 ডি ম্যাপ অ্যারে ব্যবহারের উদাহরণ রয়েছে; http://actiontad.com/tabageosHTML5/Examples/BlitMathCameraAndTravelers/


-3

আপনি যদি আবার আলটিমা-অনলাইনে পুনর্নির্মাণের পরিকল্পনা না করেন (ফলপ্রসূ 3, বা বিভ্রান্তি), পৃথিবী নির্বিঘ্ন হওয়ার কোনও কারণ নেই। বালদুরের গেট এবং আইসউইন্ড ডেল দুটি গেম যা মনে আসে যে কার্যকর মানচিত্রগুলি প্রয়োগ করে যা গেমপ্লে থেকে বিরত থাকে না।

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

আমি আপনাকে কেবল এটিই বলতে পারি যে আমি আইফোনটির জন্য একটি ছোট ওবজ-সি লিব লিখছি যা একটি 32x32 টাইলসেট নেয় এবং এটি এনএসআইমেজে টেনে নেয়। আমি এইভাবে প্রায় 10fps পাই, এবং আমার সম্ভবত ওপেনজিএল ব্যবহার করা উচিত, তবে চরিত্রটি রেক্টের বাইরে চলে গেলে আমার কেবল পুনরায় আঁকানো দরকার।

আপনার মানচিত্রটি 9 টি স্ক্রিন-আকারে বিভক্ত করা উচিত (আমার জন্য এটি 960x640 ব্লক) তাই যদি চরিত্রটি কেন্দ্রের ব্লক থেকে সরে যায় তবে আমি 9-পর্দার একটি বৃহত চিত্রতে পুনরায় আঁকাম (প্রায় 1.2MB - অনেক কিছু দেয়) আইফোন 3G তে 20MB সীমাতে রুম)। এটি মোটামুটি ধীরে ধীরে ঘটে (10fps এর চেয়ে অনেক ধীর) তাই পুনরায় অঙ্কন খেলার সময় নজরে আসে না।

আমি সম্ভবত এক পর্যায়ে ওপেনএল ইএসে চলে যাব, তবে আপাতত এটি ঠিক আছে।


[Edit]

আমাকে পরিষ্কার করার অনুমতি দিন।

9-স্ক্রিনের পটভূমির জন্য অঙ্কন অ্যালগরিদমটি 0.1 সেকেন্ড নেয় (10fps ফ্ল্যাট-আউট)। আপনার প্লেয়ার যদি এক সেকেন্ডের দশমাংশেরও কম সময়ে পুরো পর্দাটি অতিক্রম করতে না পারে তবে প্লে করার সময় পুনরায় আঁকানো উচিত er


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

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

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

@ জো, আমি এখনও নিশ্চিত নই আপনি কী বলছেন। এটি একটি চিত্র আঁকুন। তারপরে প্লেয়ারটি একটি সীমানায় না পৌঁছানো পর্যন্ত চিত্রটি একা থাকে এবং তারপরে একটি নতুন চিত্র অঙ্কিত হয়। কিভাবে যে ব্যাটারি জীবন অপচয় করে? এটি শুধুমাত্র চাহিদার ভিত্তিতে "আঁকে", এবং বাকি সময়টি ইউআইআইমেজভিউর নেটিভ অঙ্কন অ্যালগরিদম ব্যবহার করে আঁকা হয়।
স্টিফেন ফুরলানি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.