স্প্রেটিস গতিতে অস্পষ্টভাবে রেন্ডার করে


9

আমার গেমটিতে বেগ যোগ করার পরে আমার মনে হচ্ছে আমার টেক্সচারটি দুটো মুচড়ে যাচ্ছে। আমি ভেবেছিলাম এটি কেবল আমার চোখ, যতক্ষণ না অবশেষে আমি এটিকে স্ক্রিনশটে ক্যাপচার করেছি:

এখানে চিত্র বর্ণনা লিখুন

বাম দিকের একটিটি আমার খেলায় যা রেন্ডার করে; ডানদিকে একটি আসল স্প্রাইট, আটকানো হয়েছে। (এটি ফটোশপের একটি স্ক্রিনশট, 6x জুমযুক্ত ome)

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

এই বিষয়গুলি অস্পষ্ট দেখা দেওয়ার কারণ কী হতে পারে? বেগ প্রয়োগ না করে এটি হয় না।

সুনির্দিষ্টভাবে বলতে গেলে, আমার SpriteComponentক্লাসের একটি Vector2 Positionক্ষেত্র রয়েছে। আমি যখন ফোন করি তখন আমি Drawমূলত new Vector2((int)Math.Round(this.Position.X), (int)Math.Round(this.Position.Y))পজিশনের জন্য ব্যবহার করি ।

আমার আগে একটি বাগ ছিল যেখানে স্থির অবজেক্টগুলিও ঝাঁকুনি খায় - এটি আমার জন্য সোজা Positionভেক্টর ব্যবহার করার কারণে এবং মানগুলিকে গোল করার কারণে নয় ints। আমি যদি রাউন্ডের পরিবর্তে Floor/ Ceilingপরিবর্তে ব্যবহার করি তবে স্প্রাইটটি ডুবে যায় / ঘুরে বেড়ায় (এক পিক্সেলের পার্থক্য যেভাবেই হয়) তবে তবুও ঝাপসা আঁকবে।


1
এটি কি টেক্সচার ফিল্টারিং প্রয়োগ হচ্ছে এর সাথে সম্পর্কিত হতে পারে?
অরিজিনালডেমোন

আপনার শেডার জন্য কোড আছে? কিছু লোক পিক্সেলকে কেন্দ্রিক পেতে উভয় অক্ষের উপর অর্ধেক পিক্সেল যুক্ত করে। যদিও নিশ্চিত নয়, আমি মনে করি এটি কেবল ডাইরেক্টএক্সএক্স।
উইলিয়াম মারিয়ার

3
নিষ্ক্রিয় ফিল্টারিং একটি সমাধান নয় বরং সমাধানের কাজ।
আর্চি

1
রেন্ডারিং আপনার গতি সম্পর্কে কিছুই জানে না, সুতরাং স্প্রেটব্যাচ-এর সাথে আপনার অবস্থান, আকার বা অন্য কোনও কিছুই নেই ra ড্র করা আলাদা বা আপনার গতি যুক্ত করার আগে ত্রুটি উপস্থিত ছিল। আপনি স্প্রিটব্যাচকে কীভাবে ড্রেস করেন? ঠিক কীভাবে আঁকুন?
আরকি

1
@ অ্যাসেস৯৯৯ আপনি কি এই কলটি ডিবাগ করেছিলেন এবং এটি পরীক্ষা করেছেন? এক্স, এটি.ওয়াই এবং এই.আরগিন? এই.রিগিন কি সেট করা আছে? এই ড্র কলটি একই রকম হলে রেন্ডার ফলাফলের আলাদা হওয়ার কোনও উপায় নেই।
আরকি

উত্তর:


3

ভালো, এটি অস্বস্তিকর.

দেখা যাচ্ছে যে আমি পূর্ণসংখ্যার অবস্থানগুলি ব্যবহার করে অঙ্কন করছি না, তবে অবস্থানগুলি ভাসাচ্ছি। অর্চি তার মন্তব্যে আমাকে সঠিক পথের দিকে ইঙ্গিত করলেন@ashes999 did you debug this call and checked this.X, this.Y and this.origin?

আমি একটি ট্রেস স্টেটমেন্ট যুক্ত করার সাথে সাথে আমি লক্ষ্য করেছি যে কিছুই খুঁজে পাওয়া যায়নি। দেখা যাচ্ছে যে আমার SpriteComponentক্লাসটি সঠিকভাবে পূর্ণসংখ্যা মানগুলি ব্যবহার করেছে, তবে আমার SpriteSheetComponentএখনও ব্যবহৃত কাঁচা থেকে ভাসমান মান ব্যবহার করা হচ্ছে Vector2 Position

যদিও আমি টেক্সচার ফিল্টারিং এবং ক্ল্যাম্পিংয়ের চেষ্টা করিনি, তবে আমার সন্দেহ হয়েছিল যে এগুলি সঠিক পরিবর্তন নয়, কারণ আমি উত্স চিত্রের মতো একই প্রস্থ এবং উচ্চতায় একটি 2D চিত্র আঁকছিলাম (কোনও স্কেলিং নেই)।


1
হয়ে গেল, খুশী তুমি এটা পেয়েছ!
আর্চি

2

এক্সএনএ ডাইরেক্টএক্স 9 ব্যবহার করে যা পিক্সেলের কেন্দ্রটিকে তার অবস্থান হিসাবে ব্যবহার করে। ড্র ক্লাসের ভেক্টর 2 ভিত্তিক ওভারলোডগুলি ব্যবহার করার সময় এটি লক্ষণীয়। আমি বিশ্বাস করি যে বিয়োগ (.5, .5) আপনার সমস্যার সমাধান করতে হবে।

আরও তথ্য এখানে।


আমি প্রযুক্তিগতভাবে এটি করতে পারি না, কারণ আমি int, intযুক্তি হিসাবে একটি ভেক্টর 2 এ যাচ্ছি । যা ছাড়াও, আমার যখন গতিতে কোনও বস্তু নেই তখন জিনিসগুলি পুরোপুরি সূক্ষ্ম দেখায়।
ashes999

আপনি অবজেক্ট বলতে কী বোঝাতে চাইছেন? এক্সএনএর গতির কোনও ধারণা নেই এটি এমন জিনিসগুলিকে আঁকেন যেখানে আপনি এটি বলছেন। এটি স্টেশনারি স্ন্যাপশটের একটি সিরিজ। আপনি যে কোনও উপায়ে আয়তক্ষেত্রের বৃত্তাকার হওয়ায় আয়তক্ষেত্রের ওভারলোডগুলি ব্যবহার করে দেখুন।
ক্লাসিকথান্ডার

আমার নিজস্ব নিজস্ব বেগ আছে। SpriteComponentএকটি Vector2অবস্থান রয়েছে, যা বেগের উপর নির্ভর করে ভাসমান হিসাবে বৃদ্ধি করে; যখন আমি আঁকব, আমি Vector2আমার positionএক্স এবং ওয়াইয়ের পূর্ণসংখ্যার (বৃত্তাকার) সংস্করণ সহ একটি নতুন তৈরি করব This এটি সমস্যা নয়, কারণ বেগ ছাড়া স্থির অবজেক্টগুলি সূক্ষ্ম প্রদর্শিত হয়।
ashes999

সুতরাং আপনার এই বক্তব্য যে আপনার পজিশন ভেক্টর পি এবং একটি বেগ ভেক্টর ভি রয়েছে, সেগুলিকে পি + = ভি হিসাবে যুক্ত করুন, তারপরে গোলাকার মানগুলি ব্যবহার করে পি এর একটি অনুলিপি তৈরি করুন। এবং এই যে পৃথক পৃথক মানগুলির পরে একটি অবস্থান রয়েছে যা পূর্বের প + = ভি এর সমান, ড্র কলগুলি অভিন্ন হওয়া সত্ত্বেও? কারণ এটি কোনও বোধগম্য নয়।
ক্লাসিকথান্ডার

হ্যাঁ, এটিই আর্কি খুব বলছেন। আমাকে ডিবাগ করে আবার চেক করুন। আমি p += vসময় Updateজুড়ে, এবং সাথে রেন্ডার new Vector2((int)Math.Round(p.X), (int)Math.Round(p.Y)))
ashes999

2

রেন্ডারিং আপনার গতি সম্পর্কে কিছুই জানে না, সুতরাং স্প্রেটব্যাচ-এর সাথে আপনার অবস্থান, আকার বা অন্য কোনও কিছুই নেই ra ড্র করা আলাদা বা আপনার গতি যুক্ত করার আগে ত্রুটি উপস্থিত ছিল। আপনি স্প্রিটব্যাচকে কীভাবে ড্রেস করেন? ঠিক কীভাবে আঁকুন?

আপনি কি এই কলটি ডিবাগ করেছেন এবং এটি পরীক্ষা করেছেন? এক্স, এটি.ওয়াই এবং এই.রিগিন? এই.রিগিন কি সেট করা আছে? এই ড্র কলটি যখন একই রকম হয় তখন গতির সাথে রেন্ডার ফলাফল আলাদা হওয়ার কোনও উপায় নেই।


1

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

ফিল্টারিং সহ এবং ছাড়া গেমগুলির একটি দুর্দান্ত উদাহরণ হ'ল সুপার মারিও 64 যা ডুম করেনি এমন সময়ে ফিল্টারিং ছিল।

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

আপনি আপনার স্প্রাইটটি সত্যিই বড় স্ক্রিনে রেন্ডার করে ফিল্টারিং চালু আছে তা যাচাই করতে পারেন। যদি এটি অস্পষ্ট হয়, তবে এটিই সমস্যা।

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

এছাড়াও আপনি পড়তে পারেন এই


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

1

স্প্রেটব্যাচ.ব্যাগিন কলটিতে আপনার সাম্পারস্টেটকে সাম্পারস্টেট.পয়েন্ট প্লেয়ারে সেট করার চেষ্টা করুন।

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