আমি কীভাবে 2 ডি গেম রেজোলিউশনটি স্বাধীন করব?


10

আমি একটি সাধারণ 2 ডি গেম নিয়ে কাজ করছি। আমি মোবাইল ফোন সংস্করণ শেষ করেছি।

তবে, আমার বস চান গেমটি তার আরটি-তে কাজ করে works আমি "রূপান্তর" করছি কিন্তু আমার বোতামগুলি ভুল জায়গায় রয়েছে, কারণ আমি পর্দার আকারকে এইভাবে হার্ড-কোডড করেছি:

 texture = game.Content.Load<Texture2D>("StartScreen");
 mainFrame = new Rectangle(0, 0, game.GraphicsDevice.Viewport.Width, game.GraphicsDevice.Viewport.Height);

 // button definitions
 startbrect = new Rectangle(300, 258, 88, 88);
 startbtext = game.Content.Load<Texture2D>("bplay");

এই উদাহরণে, mainframeঠিক আছে, তবে startbrectতা নয়, কারণ আমি একটি উইন্ডোজ ফোনের স্ক্রিনটি মাপার জন্য আকারটি সংজ্ঞায়িত করেছি। সমস্ত উইন্ডোজ 8 ফোনের স্ক্রিন আলাদা থাকলে আমি কীভাবে প্রতিক্রিয়াশীল ডিজাইন পরিচালনা করতে পারি? প্রতিবার ভাল আকারের গণনা করার জন্য কি কোনও সূত্র বা ম্যাক্রো আছে?


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

আমি আরও মার্জিত উপায় খুঁজছি, তবে আমি মুহুর্তের জন্য শতাংশের সাথে চেষ্টা করব।
গ্যাবসন

2
আপনার ক্যামেরাটি ব্যবহার করে তা করতে সক্ষম হওয়া উচিত।
ashes999

আমার সমাধানটি শতাংশের সাথে ডিল করা ভাল ছিল না।
গ্যাবসন

উত্তর:


17

আমি একটি রেফারেন্স স্ক্রিনের আকার ব্যবহার করি এবং প্রত্যেকটির অনুপাতকে একইরকম রাখার সাথে সাথে সমস্ত কিছু স্কেল করি।

private static float CalcRatio(Vector2 Sizes)
{
    return Sizes.y/Sizes.x;
}

public static Vector2 CalculateNewPos(Vector2 RefPos, Vector2 RefScreenSize, 
                                      Vector2 CurrentScreenSize)
{       
    return new Vector2((RefPos.x/RefScreenSize.x) * CurrentScreenSize.x, 
                       (RefPos.y/RefScreenSize.y) * CurrentScreenSize.y);
}

public static Vector2 CalculateNewSize(Vector2 RefSize, Vector2 RefScreenSize,
                                       Vector2 CurrentScreenSize)
{       
    float origRatio = CalcRatio(RefSize);
    float perW = RefSize.x * 100f / RefScreenSize.x;    
    float newW = perW / 100f * CurrentScreenSize.x;
    float newH = newW * origRatio;
    return new Vector2(newW, newH);
}

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

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

আরও তথ্যের জন্য, http://en.wikedia.org/wiki/Safe_area_(teTV) দেখুন এটি একইরকম, ধারণা না থাকলে।


0

আমি মনে করি স্বাধীন লেআউটগুলি সমাধানের সবচেয়ে সহজ এবং প্রাকৃতিক পদ্ধতির একটি আপেক্ষিক (শতাংশ) প্রকল্প percentage সুতরাং শুরু থেকে আসল রেজোলিউশনের সাথে কাজ করবেন না তবে যেখানেই সম্ভব সেখানে কেবল একটি ইউনিফর্ম [0,1] x [0,1] বর্গক্ষেত্রে।

এর অর্থ হল যে প্রদত্ত screen_sizeএবং প্রদত্ত object_sizeএবং প্রদত্ত আপেক্ষিক অবস্থানের (px, py)জন্য (উদাহরণস্বরূপ (পর্দার কেন্দ্রের জন্য (0.5, 0.5)), অবজেক্টের উপরের, বাম কোণটি দ্বারা গণনা করা হয়:

x = px * screen_size.width - 0.5 * object_size.width
y = py * screen_size.height - 0.5 * object_size.height

ধারণাটি পরিষ্কার হওয়া উচিত। একটি প্রস্তুত বিমূর্ততা হবে

x = cx1 * screen_size.width + cx2 * object_size.width + cx3
y = cy1 * screen_size.height + cy2 * object_size.height + cy3

এবং প্রতিটি অবস্থান তখন সংজ্ঞায়িত করা হয় (cxi, cyi)। এটির মাধ্যমে কোনও কোনও সীমানা সহ বা ছাড়াই কোণগুলিতে স্থাপন করতে পারে place

দয়া করে নিশ্চিত করুন যে একক উপাদানগুলির আকার (বোতাম, লেবেল, ...) খুব মাপছে।


-2

মনোগেমের জন্য বিশেষ আমি আইআরআর (স্বতন্ত্র রেজোলিউশন রেন্ডারার) নামক এই সমস্যার জন্য প্ল্যাটফর্মের স্বাধীন সমাধান পেয়েছি। এটির খুব সাধারণ ব্যবহার রয়েছে:

  1. ইনিশিয়াল () পদ্ধতিতে আইআরআর তৈরি করুন

    _আইআরআর = নতুন রেজোলিউশনরেেন্ডার (এটি, ভার্চুয়ালআরসিউশনউইথ, ভার্চুয়াল রিসোলিউশন হাইট, _জিএফএক্স.প্রিফারডব্যাকবফারউইথ, _জিএফএক্স.প্রিফারডব্যাকবফারহাইট);

  2. কল _irr.Draw () প্রতিটি চক্র অঙ্কন () কল
  3. সাপ্লাই _irr.GetTransformationMatrix () কোন SpriteBatch.Begin () কল IRR ব্যবহার করতে চান।

বিবরণটি এখানে: http://panthernet.ru/forum/index.php?/topic/17-monogamexna-example-v14/?p=44

কোডটি এখানে: https://github.com/panthernet/Monogame- উদাহরণ

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