গেম ইঞ্জিনে সম্পদ চিহ্নিতকরণ?


12

আমি আমার বোঝা সম্পদগুলি সনাক্ত করতে চাই, তবে আমার কোনটি নির্বাচন করা উচিত তা আমি জানি না। এখানে 2 টি বিকল্প রয়েছে:

  • নাম (স্ট্রিং)

    • এটি আনর্ডার্ড_ম্যাপ (ও (1)) সহ সবচেয়ে সহজ এবং দ্রুত, তবে পূর্ণসংখ্যার সাহায্যে ধীরগতির।
    • কোড সহজেই বোধগম্য।
  • পূর্ণসংখ্যার

    • দ্রুততম।
    • কোডে বোধগম্য নয়।

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

আমি জানি যে এই ইস্যুটির পুরো ইন্টারনেট জুড়ে কয়েকটি থ্রেড রয়েছে তবে কোন ক্ষেত্রে এটি কতটা গুরুত্বপূর্ণ তা আমি জানতে পারি না।


10
উভয়ের বাস্তবায়ন হয় না কেন? স্ট্রিং সংস্করণটি একটি অভিধান <স্ট্রিং, ইনট> এর সাথে সংযোগ স্থাপন করে যার পরিবর্তে কোনও অভিধানকে <int, সম্পদ> বলা হয়। আপনি কোডে স্ট্রিং ভিত্তিক স্তরটি ছড়িয়ে দিতে পারেন, তবে ব্যবহারকারীর মিথস্ক্রিয়ার জন্য স্ট্রিং ভিত্তিক স্তরটি ব্যবহার করতে পারেন।
ক্রিথিক

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

কিছুটা ভিন্ন প্রসঙ্গে একই সমস্যা: আইটেম প্রয়োগের বিভিন্ন পদ্ধতি - পার্থক্য কী?
ফিলিপ

উত্তর:


19

আপনি উভয় সমর্থন করতে পারেন।

যদিও এটা প্রায়ই আরো একটি পূর্ণসংখ্যা বা কিছু অনুরূপ ফাস্ট টু তুলনা কী দ্বারা রেফারেন্স সম্পদের রানটাইম এ দক্ষ, এটা প্রায়ই আরো নকশা সময় নাম তাদের রেফারেন্স এ কার্যকর, কারণ মানুষের মতো নাম দিয়ে কাজ এ অনেক বেশি ভালো হয় enemy_bullet_casing_soundতুলনায় 72910613

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

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


আমার কেস: আমি কোনও অবজেক্টের উপাদান পরিবর্তন করতে চাই, তাই আমি নতুন সামগ্রীর নাম সহ একটি অনুরোধ পাঠাব। (স্ট্রিং) তারপরে গ্রাফিক্স সিস্টেমে একটি <স্ট্রিং, পয়েন্টার> আনর্ড্রেইড ম্যাপে একটি অনুসন্ধান রয়েছে এবং অবজেক্টের উপাদানটির পয়েন্টারটি নতুন পয়েন্টার দ্বারা প্রতিস্থাপন করা হবে। সুতরাং আমার ক্ষেত্রে, আমি এটি একটি পূর্ণসংখ্যার রূপান্তর করতে হবে না? (যেহেতু আমি এটিকে পয়েন্টারে রূপান্তর করি এবং ঘন ঘন অ্যালগরিহিমগুলিতে আমি পয়েন্টার ব্যবহার করি, আমি কেবল মাঝে মাঝে জিনিসগুলির জন্য স্ট্রিং ব্যবহার করি))
টুডওয়ারী

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

1

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

MngTexture->get(hash("my_texture"))

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

|my_texture| = "ball.PNG"

যেখানে || এটি এমন একটি অপারেটর যা সংকলককে ভিতরে শব্দটি হ্যাশ করতে বলে।

সুতরাং মূলত আমি স্ট্রিংগুলি ব্যবহার করি যা সংকলনের সময় ইনটগুলিতে ম্যাপ করা হয় (তাই তাদের কোনও ওভারহেড নেই) উভয়ই আসল কোডে এবং ফাইলগুলিতে যা লোডিং উপাদানগুলির জন্য স্ট্রিম। হ্যাশ গণনার জন্য একটি সংকলন সময় কেবল এটি গুগল করে, এটি কোডের 5-10 লাইনের একটি সাধারণ ফাংশন।

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

আশা করি এটি সাহায্য করতে পারে।


0

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

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

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