আইওএস গেমসের জন্য উদ্দেশ্য-সি বা সি ++?


18

আমি ওজেক্টিভ-সি এবং সি ++ তে বেশ আত্মবিশ্বাসী প্রোগ্রামিং করছি তবে আমি উদ্দেশ্য-সি ব্যবহার করতে কিছুটা সহজ এবং আরও নমনীয় এবং প্রকৃতির গতিশীল বলে মনে করি।

আইওএসে গেমস লেখার জন্য ওবজে-সি-র পরিবর্তে সি ++ ব্যবহার করার সময় কী কী উপকারিতা হবে? বা বরং, সি ++ এর তুলনায় ওবজ-সি ব্যবহারে কোনও জ্ঞাত সমস্যা আছে?

উদাহরণস্বরূপ, আমার সন্দেহ হয় সি / সি ++ তে লিখিত কোডের তুলনায় ওবজ-সিতে পারফরম্যান্সের সমস্যা থাকতে পারে।


একই ধরণের প্রশ্ন এসও
বোবোবোবো

উত্তর:


21

সি ++ এর একটি বড় বিপরীতমুখী: আপনি যদি এটির সিদ্ধান্ত নেন তবে অ্যান্ড্রয়েড / পিসি / ডিএস / পিএসপি / (এখানে পছন্দের প্ল্যাটফর্ম সন্নিবেশ করানো) তুলনামূলকভাবে সহজ। আপনি পুরো গেমটি পুনরায় লেখার সিদ্ধান্ত না নেওয়া পর্যন্ত উদ্দেশ্য-সি আপনাকে আইওএস এ লক করবে।


10
আমি "সহজ" শব্দটির সাথে একমত নই। "সম্ভাব্য" আরও ভাল পছন্দ হতে পারে।
ডিভে

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

3
তুলনামূলকভাবে সহজ! বিকল্পটি যদি অসম্ভব হয়ে থাকে তবে "অত্যন্ত কঠিন" তুলনামূলকভাবে সহজ;)
জোরবাথুত

blog.vucica.net/2011/06/… তিনি অ্যান্ড্রয়েডের জন্য অবজেক্টিভ সি অ্যাপ্লিকেশন তৈরির বিষয়ে কথা বলেছেন। এটি কেবল লিনাক্স এবং লিনাক্স একটি আইফোনের মতো সহজেই ওজজিসি চালাতে পারে।
ভয়ানক বিড়াল

উদ্দেশ্য সি ব্যবহার করে আপনাকে লক করতে পারবেন না the এক্সএনইউ কার্নেলের সাথে নির্দিষ্ট ফাংশনগুলি ব্যবহার করা হবে। Gclang একটি কারণ আছে।

16

এখানে কোনও আসল উপকার বা কনস নেই, কমপক্ষে এমন কোনওরও নেই যা প্রোগ্রামারকে অন্য ভাষা ব্যবহারে এক ভাষাতে স্বাচ্ছন্দ্য বোধ করবে না।

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

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

প্রকল্পটি সমাপ্ত করা আরও গুরুত্বপূর্ণ যে প্রযুক্তি সম্পর্কে উদ্বেগজনক, এবং যদি আপনি ওবজে-সিতে বেশি উত্পাদনশীল হন তবে ওবজ-সিতে থাকুন।

আমার পছন্দ? আমি সি ++ লোক। আমি OBJ-সি মত শুধু জরিমানা, কিন্তু আমি C ++ খুশি, এবং আমি কি করতে লেখ ক্রস প্ল্যাটফর্ম কোড।


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

4

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

বলেছিল, তোমার গেমের উদ্দেশ্য কী?

  • আপনি যদি কেবল আইওএসের জন্যই লিখছেন, তবে যে ভাষা বা সংমিশ্রণে আপনি আরও স্বাচ্ছন্দ্য বোধ করছেন তা চিন্তা করবেন না এবং লিখুন me আমার জন্য, এটি সিটি ++ এর আমার প্রিয় অংশটি এসটিএল এর সাথে ওবজ-সি ++ হওয়ার কারণ ঘটে। যেহেতু আমি সি ++ এর চেয়ে ওবজ-সিটিকে কিছুটা বেশি পছন্দ করি, তাই আমি এই বিকল্পটি ব্যবহার করার ঝোঁক।

  • আপনি যদি অন্য ডিভাইসে পোর্টিংয়ের লক্ষ্য নিয়ে লিখছেন, তবে ডিভাইস-নির্দিষ্ট স্টাফ (গ্রাফিক্স, ইনপুট, ক্যামেরা, ...) যেখানে কল করা হয়েছে সেগুলি মোকাবেলায় ওবজে-সি-তে একটি অনুবাদ স্তর সহ সি ++ এ লিখুন where আপনার অ্যাপ্লিকেশন এন্ট্রি পয়েন্টস।

  • আপনি যদি খাঁটি হন এবং কেবল একটি ভাষা চান তবে ওবজে-সিতে লিখুন।

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

একটি সতর্কবাণী: বার্তা প্রেরণের সাথে একটি পয়েন্টার ইন্ডিরিশন কল রয়েছে। আপনি এটিকে ওভারহেড হিসাবে কতটা ব্যাখ্যা করতে পারবেন তা আমি নিশ্চিত নই, যেহেতু আমি যথেষ্ট নিশ্চিত যে এটি উত্তরাধিকার সূত্রে প্রাপ্ত C ++ পদ্ধতি কল হিসাবে একই as কেউ কি এই বিষয়টি পরিষ্কার করতে পারে?

আশা করি এইটি কাজ করবে,

লি।


1
ভাল পয়েন্টস, তবে আপনি কি সত্যিই Vector3Dওবজে-সিতে আপনার ক্লাসটি লিখতে চান ? আমার অন্ত্রের অনুভূতি আমাকে জানায় যা খারাপ অভিনয় করতে পারে।
মার্টিন উইকম্যান

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

2
ওবহেড-সি সহ ওভারহেড বার্তাটি সি ++ এর থেকে বেশ খানিকটা বেশি কারণ এটি আরও গতিশীল। এটি অবশ্যই "একরকম নয়"। উদাহরণস্বরূপ: দেখুন বিকাশকারী.অ্যাপল.
অ্যান্ডি ডেন্ট

1

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

এই পঠনটি পরীক্ষা করে দেখুন - প্রাসঙ্গিক অংশটি "শ্রমের বিভাজন", কখন আপনাকে উচ্চ স্তরের ভাষায় কোড করতে হবে এবং কখন নিম্ন স্তরের ব্যবহার করতে হবে তা সিদ্ধান্ত নিতে আপনাকে সহায়তা করতে পারে: গেমসে পরিচালিত কোড

যদিও উদ্দেশ্য-সি ওভারহেড সি # এর নিকটবর্তী হওয়া উচিত নয় এবং এমনকি এটি পরিচালনা করা হয়নি (আইওএসে), তবে আমি বিশ্বাস করি যে যুক্তিটি এখনও প্রয়োগ হয় এবং আইওএস চলমান ডিভাইসগুলিও পিসির মতোই শক্তিশালী নয় যা এমএসআইএলকে ব্যাখ্যা করবে :)


2
ওবিজে-সি আইওএস-এ পরিচালিত কোড নয়। উদাহরণস্বরূপ (এবং বিশেষত) ওএসএক্সের জন্য প্রোগ্রামিং করার সময় ওবজ-সিতে আবর্জনা সংগ্রাহক রয়েছে তবে আইওএস-তে এটি কোনও আবর্জনা সংগ্রাহক নেই।
ঝাঁকুনি

@ ঝকিং আমি কখনও বলিনি যে এটি পরিচালিত হয়েছিল, সি ++ এর বিপরীতে অবজেক্ট-সি ব্যবহার করার পরে এখনও ওভারহেড নেই? আমি সি # বনাম সি ++ উল্লেখ করেছি এটির কাছে ইজেজ-সি বনাম সি ++ এর কাছাকাছি ছিল না
জাকি জার্মান

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

ওহ এবং আমি জানি না ওবজ-সি এর সি ++ এর তুলনায় কোনও ওভারহেড আছে কিনা। এজন্য আমি নিজেই একটি উত্তর পোস্ট করছি না।
ঝাঁকুনি খাচ্ছি

1
@ জহকিং না স্যার :) "কথাটি হ'ল, উদ্দেশ্যটি-সি-তে ধরে রাখা / প্রকাশের মডেল মোটামুটি কোনও স্মৃতি পরিচালনার থেকে কোনও বেসিক জিসিতে একটি মাঝের ক্ষেত্র যাতে আপনি ইতিমধ্যে বক্ররেখার চেয়ে এগিয়ে are" ইন্টারফেসল্যাব.ওবজেক্টিভ-
সি

1

এই সমীক্ষায় বলা হয়েছে যে একটি সিপিইউ নিবিড় গেমটিতে সত্যই পারফরম্যান্স পেতে আপনাকে সি ব্যবহার করতে হবে লিঙ্কযুক্ত নিবন্ধটি আপনি চালাতে পারেন এমন একটি এক্সকোড প্রকল্পের সাথে সম্পূর্ণ।

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

আমি বোঝাতে চাইছি এটি সম্পূর্ণ নির্বোধ হবে position = [[Vector3 alloc] init] ;। আপনি যদি কোনও অবস্থান ভেক্টরের মতো মৌলিক অবজেক্টগুলিতে রেফারেন্স গণনা ব্যবহার করেন তবে আপনি কেবল একটি পারফরম্যান্স হিটের জন্য জিজ্ঞাসা করছেন।

এই তুলনাগুলি দেখুন,

তুলনা


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