LibGDX এ রেজোলিউশনের স্বাধীনতা


22

আমি কীভাবে আমার libGDX গেম রেজোলিউশন / ঘনত্বকে স্বাধীন করব? অন্তর্নিহিত ঘনত্ব নির্বিশেষে চিত্রের মাপগুলি "পরম" হিসাবে নির্দিষ্ট করার কোনও উপায় আছে কি?

আমি খুব সাধারণ বাচ্চাদের খেলা তৈরি করছি; অন ​​স্ক্রিনে প্রদর্শিত স্প্রাইটের একটি গোছা এবং মেনুগুলির জন্য কিছু পাঠ্য (বিকল্পগুলি মেনু প্রাথমিকভাবে)। আমি যা জানতে চাই তা হল: আমি কীভাবে আমার স্প্রাইটস / ফন্ট রেজোলিউশনটিকে স্বাধীন করব? (জিনিসগুলিকে আরও সহজ করার জন্য আমি এগুলিকে আমার নিজের ক্লাসে গুটিয়ে রেখেছি))

যেহেতু এটি একটি সহজ বাচ্চাদের খেলা, আমার গেমের "খেলার যোগ্য অঞ্চল" সম্পর্কে চিন্তা করার দরকার নেই; আমি যতটা সম্ভব স্ক্রিন স্পেস ব্যবহার করতে চাই।

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

এছাড়াও, এটি অ্যান্ড্রয়েডের "ডিভাইস ইন্ডিপেন্ডেন্ট পিক্সেল" (ডিপি) এর মুখোমুখি উড়ে গেছে বলে মনে হচ্ছে। অথবা হতে পারে আমি কিছু মিস করছি এবং ইতোমধ্যে libGDX এর কোনওভাবে যত্ন নিচ্ছে?

এটি মোকাবেলার সেরা উপায় কী? আমি এই লিঙ্কটি খুঁজে পেয়েছি; এটি কি সমস্যা সমাধানের একটি ভাল উপায় ?: http://www.dandeliongamestudio.com/2011/09/12/android-fragmentation-density-ind dependent-pixel-dip /

এতে চিত্রগুলি কীভাবে নিয়ন্ত্রণ করতে হবে তা উল্লেখ করা হয়েছে, তবে ঘনত্ব নির্বিশেষে ফন্ট / চিত্রের আকারগুলি কীভাবে নির্দিষ্ট করবেন তা উল্লেখ করা হয়নি।



পছন্দ করুন এটি রেজোলিউশন সম্পর্কে; আমি ঘনত্ব এবং রেজোলিউশনের মধ্যে ইন্টারপ্লে সম্পর্কে আরও উদ্বিগ্ন।
ashes999

উত্তর:


12

যেহেতু আপনি ডিভাইসের ঘনত্বটি পড়তে এবং লাইবগডেক্সে রানটাইম চলাকালীন ফন্টগুলি রেন্ডার করতে পারেন , তাই আমি ঘনত্বের স্বাধীন ফন্টের আকারটি অর্জন করতে এই সমাধানটি ব্যবহার করি:

float densityIndependentSize = origFontSize * Gdx.graphics.getDensity();
int fontSize = Math.round(densityIndependentSize );
BitmapFont font = generator.generateFont(fontSize );

আমার আলোচনা চিত্রগুলির পাশাপাশি ফন্টগুলি নিয়ে। ডায়নামিক ফন্ট রেন্ডারিংয়ের জন্য +1 (যদিও আমি এটি ইতিমধ্যে এটি করেছি)।
ashes999

10

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

public class GameStage extends Stage 
{ 
     public GameStage(float width, float height, boolean stretch) 
     { 
          this.camera = new OrthographicCamera(800, 480);
          this.camera.position.set(800/2, 480/2, 0f); 
     } 
}

আমি একটি কোড নমুনা পেতে পারেন, দয়া করে?
ashes999

কোডটি স্থির করে, এবং আপনি এমন একটি শ্রেণি তৈরি করেন যা স্ক্রিন ইন্টারফেস প্রয়োগ করে, আপনি যে স্ট্রাক্ট নির্মাণ করেন এবং আপনার রেন্ডার পদ্ধতিতে আপনি স্টেজ.ড্রে () রাখেন। আপনি যদি পর্যায়গুলি ব্যবহার করতে চান না, আপনি স্ক্রিন প্রয়োগকারী ক্যামেরা ধরণের শ্রেণিতে একটি পরিবর্তনীয় ঘোষণা করতে পারেন এবং স্টেজের মতো একই কাজ করতে পারেন তবে রেন্ডার পদ্ধতিতে আপনি ক্যামেরায় একটি আপডেট প্রয়োগ করেন।
রুডি_এম

এটি আসলে বেশ ভাল কাজ করে।
you786

4

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

  1. আসল ডিভাইস ডিপিআইয়ের সাথে মেলে প্রাক-বিদ্যমান চিত্রগুলি স্কেল করুন।
  2. ডিপিআই এর উপর ভিত্তি করে রান-টাইমে বিভিন্ন প্রাক-স্কেল করা চিত্র থেকে বেছে নিন।

অবশ্যই, আপনি দুটি এর কিছু মিশ্রণ করতে পারেন (মোটামুটি সঠিক চিত্র বাছাই এবং তারপরে এটি স্কেলিং), বা আপনার ইউআই এর বিভিন্ন উপাদানগুলির জন্য বিভিন্ন পদ্ধতির ব্যবহার করতে পারেন (যেমন, ফন্ট / পাঠ্যের জন্য প্রাক-বিদ্যমান চিত্র এবং গেমপ্লের জন্য ডায়নামিক স্কেলিং) sprites)।

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

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

সমস্যাগুলির কিছু আলোচনা এবং কিছু সমাধানের জন্য মারিও জেরচনারের বিগনিং অ্যান্ড্রয়েড গেমগুলি দেখুন । নোট করুন যে মারিও লিবিজিডিএক্সের লেখক, সুতরাং বইটির পদ্ধতির লাইবজিডিএক্স একটিকে আয়না দেওয়া হয়েছে (নোট করুন তারা এক-এক নয়, বইটি libGDX এর মতো একটি লাইব্রেরি লেখার জন্য কভার করে, তবে নিজেই libGDX নয়)।


এমনকি আমি ডিপিআইয়ের উপর ভিত্তি করে প্রাক-তৈরি চিত্র সংগ্রহ থেকে নির্বাচন করলেও, আমি কীভাবে গ্যারান্টি দিতে পারি তা দেখছি না "এই স্প্রাইটটি 64x64 হিসাবে প্রদর্শিত হবে as"
ashes999

1
আমি ধরে নিচ্ছিলাম যে আপনি শারীরিক প্রদর্শনের সাথে মেলে আপনার ওপেনএলএল ক্যামেরাটি সেট করেছেন, সুতরাং 1 ওপেনগিএল পিক্সেল মানচিত্র 1 ডিসপ্লে পিক্সেলে। এই সময়ে একটি 64x64 চিত্র স্ক্রিনে 64x64 হিসাবে প্রদর্শিত হবে। রুডি_এম যেমন উল্লেখ করেছে, পুরো স্ক্রীন স্কেলিংটি পেতে আপনি ক্যামেরা ম্যাপিংয়ের সাথে জগাখিচুড়ি করতে পারেন।
পিটি

ঠিক আছে, এটি আমার পরে "সিক্রেট সস" এর মতো দেখাচ্ছে। আমি চেক করব এবং আপনাকে জানাব, ধন্যবাদ।
ashes999

0

এটি করার এক উপায় হ'ল আপনার গেমের জন্য ন্যূনতম দিক অনুপাত এবং সর্বাধিক দিক অনুপাত def আপনি যে অনুপাতটি সমর্থন করতে চান এটি হ'ল। তারপরে আপনাকে একটি ভিউপোর্ট ব্যবহার করা দরকার যা এখন libGdx এ সরবরাহ করা হয়েছে। আপনার সরবরাহিত সেটিংস অনুযায়ী ভিউপোর্টটি আপনার বিশ্বের স্কেল করবে।

বিভিন্ন ধরণের ভিউপোর্ট রয়েছে এবং আপনার গেমের জন্য সবচেয়ে উপযুক্ত এমন একটি নির্বাচন করতে হবে।

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

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