আমি কীভাবে কাস্টম ইঞ্জিন ব্যবহার করে একাধিক প্ল্যাটফর্মে চালাতে পারি?


13

ইউনিটি এবং অবাস্ত্রের মতো গেম ইঞ্জিনগুলি একাধিক প্ল্যাটফর্মগুলিতে চলতে পারে। আমি ভাবছি তারা কীভাবে এটি করে।

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

উত্তর:


26

প্রতিটি প্ল্যাটফর্ম আপনার ইঞ্জিন পোর্ট। এটি সম্পর্কে বিশেষ কিছুই নেই। আপনার যদি উইন্ডোজ-কেবল এমন কিছু কোড থাকে তবে ফাইলটিতে কিছু # আইডিডিফ যুক্তি যুক্ত করুন বা একটি দ্বিতীয় ফাইল যুক্ত করুন (যাতে আপনার থাকতে হবে FooWindows.cppএবং FooLinux.cppযা কিছু থাকে) যা অন্য ওএস (স্পেস) এর ক্ষেত্রে আপনার বৈশিষ্ট্যটি প্রয়োগ করে ।

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

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

এইচটিএমএল 5 এর মতো জিনিসের জন্য, এমস্ক্রিপ্টেনের মতো সরঞ্জাম রয়েছে যা জাভাস্ক্রিপ্টে চালানোর জন্য একটি সি ++ অ্যাপ্লিকেশন সংকলন করতে পারে। আপনার মূলত এমস স্ক্রিপ্টের জন্য আপনার ইঞ্জিনের অন্য একটি বন্দর তৈরি করতে হবে (যেহেতু এটি কোনও স্বেচ্ছাসেবী সি ++ গ্রন্থাগার / বৈশিষ্ট্যটি ব্যবহার করতে পারে না)।

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


14
আমার অভিজ্ঞতা crossplatform সফ্টওয়্যার (সবচেয়ে বড় প্রকল্প হটস্পট হবে) আপনার সাথে কাজ সত্যিই কোড মাধ্যমে নিক্ষিপ্ত ifdefs থাকার এড়াতে চান। share/os/<linux>(বা share/cpu/x86) এর মতো কিছু পাওয়া এবং সেখানে প্ল্যাটফর্মের নির্দিষ্ট কোডটি রেখে দেওয়া এবং তারপরে শর্তযুক্ত অন্তর্ভুক্ত করা অবশ্যই ভাল। এটি হ'ল কমপক্ষে জিসিসি, হটস্পট এবং লিনাক্স কার্নেল কী করে (অবশ্যই কোনও কঠোর নিয়ম নয়)। হ্যাঁ আপনি কেবলমাত্র একটি একক ক্রিয়াকলাপ দিয়ে শুরু করতে পারেন যা প্ল্যাটফর্ম নির্ভর think
ভু

14

এখানে কোন ম্যাজিক বুলেট নেই। আপনি যদি নিজের গেমটি একাধিক প্ল্যাটফর্মে চালিত করতে চান তবে আপনাকে একাধিক প্ল্যাটফর্মের জন্য কোড লিখতে হবে (বা ইতিমধ্যে আপনার জন্য এটি করা তৃতীয় পক্ষের লাইব্রেরি)।

আপনি যে জিনিসগুলির জন্য জিজ্ঞাসা করছেন সেগুলি প্রান্তিককরণ করবেন না: আপনি বলছেন (জোর আমার)

আমি যা খুঁজছি তা হ'ল এমন কিছু সংহত করার জন্য সংস্থান যা আমাকে পুনর্লিখন না করে বিভিন্ন প্ল্যাটফর্মে চালানোর অনুমতি দেয়

তবে তাও (আমার আবার জোর দেওয়া)

আমি সচেতন যে আমি নিজের লেখার পরিবর্তে অন্য একটি ইঞ্জিন ব্যবহার করতে পারি তবে আমি শেখার অভিজ্ঞতায় আগ্রহী

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

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


2

অন্য দুটি উত্তরের বিপরীতে (যা সঠিকভাবে সি ++ - নির্দিষ্ট) রয়েছে, অন্য একটি উপায় আছে। কিছু আর্কিটেকচার যা মনে আসে:

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

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

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


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

আপনার নিজস্ব সি ++ ইঞ্জিন ঘোরানো এবং প্ল্যাটফর্মের আওতায় এটি পোর্ট করার তুলনায় @ জোশিপেট্রি অবশ্যই আপনাকে "নিখরচায়" প্রচুর পরিমাণে পাবেন।
ashes999

@ ashes999 উত্তরের জন্য ধন্যবাদ, libGDX উজ্জ্বল আমি এটি ব্যবহার করি কিন্তু আমি এটি লিখতে চলেছি যাতে এটি ক্রস প্ল্যাটফর্মের কাজ করে তারপর সিএমকে ব্যবহার করুন, আমি বিদ্যমান চিরস্থায়ী লাইব্রেরি বা ইঞ্জিন ব্যবহার করার চেয়ে চ্যালেঞ্জের পক্ষে এর মধ্যে আরও বেশি
ড্যানিয়েলকোলিয়ার

2

আমি এই মুহূর্তে একটি ক্রস-প্ল্যাটফর্ম গেম ইঞ্জিন তৈরি করছি। আমি এসডিএল ব্যবহার করছি, যা ব্যথা কমাতে গ্রাফিক্স অ্যাপ্লিকেশন তৈরির জন্য একটি দুর্দান্ত (এবং উপযুক্ত নিম্ন স্তরের) ক্রস-প্ল্যাটফর্ম লাইব্রেরি।

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

আমি আপনাকে #ifdefআপনার কোড জুড়ে সর্বত্র ব্যবহার থেকে নিরুৎসাহিত করব । পরিবর্তে, মূল আদিমতার চারপাশে বিমূর্ততাগুলি তৈরি করুন (এ জাতীয় আদিমতার উদাহরণ টিসিপি সকেট হতে পারে)।

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


0

যদি আপনি এটি "স্ক্র্যাচ থেকে" শেখার অভিজ্ঞতা হিসাবে করতে চান তবে আপনাকে উইন 32 এপিআই ব্যবহার করতে হবে যেখানে আপনি উইন্ডো খোলার এবং এমএসডিএন এবং ওপেনজিএল উইকির উপর একটি ওপেনগিএল প্রসঙ্গ ( http: // www) পেতে পারেন information .opengl.org / wiki / Creing_an_OpenGL_Context_ (WGL) )। লিনাক্সের জন্য ও'রিলি এক্সলিব প্রোগ্রামিং ম্যানুয়াল এবং এক্সলিব রেফারেন্স ম্যানুয়ালের দ্বিতীয় হাতের অনুলিপি পান এবং জিএলএক্স-এ (এক্স উইন্ডো সিস্টেমের ওপেনজিএল এক্সটেনশন) পড়ুন। আরও দেখুন http://www.opengl.org/wiki/ টিউটোরিয়াল :_ ওপেনজিএল_3.0_ কনটেক্সট_ক্রিয়েশন_( জিএলএক্স)

তারপরে আপনাকে কেবল একই অ্যাপ্লিকেশনটিতে একই অ্যাপ্লিকেশন সরবরাহ করতে হবে যা একই কাজ করে (যেমন উইন্ডো খুলুন) তবে প্রতিটি প্ল্যাটফর্মের জন্য পৃথক বাস্তবায়ন রয়েছে। আপনি বিভিন্ন প্ল্যাটফর্মের জন্য আপনার ইঞ্জিনের অংশগুলি পুনরায় লেখেন। তারপরে ইঞ্জিনটি ব্যবহার করে আপনি যে গেমটি লেখেন সেগুলি আপনাকে কেবল একবার লিখতে হবে তবে এটি বিভিন্ন প্ল্যাটফর্মগুলিতে কাজ করবে।


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