لعبة البرمجة - كيفية تجنب إعادة اختراع العجلة

StackOverflow https://stackoverflow.com/questions/235151

  •  04-07-2019
  •  | 
  •  

سؤال

موجز:

يمكنني أن برنامج "سميكة العميل" اللعبة في C دون إعادة اختراع عجلات, أو يجب علي أن لدغة رصاصة واستخدام بعض المكتبات أو SDK ؟ أنا معتدل ج مبرمج و لست تخاف من العمل مع مؤشرات البيانات هياكل مواقع الذاكرة ، الخ.إذا وسوف تعطيني التحكم أريد أن تجعل عظيم "سميكة العميل" لعبة.ومع ذلك, أنا أفكر في تجنب اللغات عالية المستوى & أطر أجل السلطة والسيطرة ، لا سهولة الاستخدام.

أنا مثيرة للاهتمام في ترقيع مع القتال 2D/لعبة platforming كمشروع جانبي في وقت ما.أنا في المقام الأول خادم لينكس جانب مبرمج من ذوي الخبرة في Python, Ruby و PHP.أنا أعرف أن هناك ممتازة من الأطر في بعض هذه اللغات مثل PyGame.أنا أيضا على علم من نجاح الناس مع أشياء مثل الهواء .صافي...ولكن لدي بعض المخاوف:

  • الأداء:لغات البرمجة المعروف بطيئة.إذا أنا على صنع لعبة الوقت الحقيقي ، أريد أن يكون لاذع ممكن.
  • ضخمة الثنائيات:باستخدام أطر مثل .صافي أو لغات البرمجة مثل روبي في كثير من الأحيان يؤدي كبيرة CLRs أو المكتبات التي لا تحتاج إلا.لعبة أريد أن تكون صغيرة وبسيطة .. لا أريد لها CLR اكبر من اللعبة نفسها!
  • الاشياء الاضافية:بصراحة أنا لا أحب فكرة وراثة بعض لعبة كبيرة المكتبة الأمتعة إذا كنت يمكن أن أتغاضى عن كود بلدي أفضل.

أنا أسأل هذا السؤال لأنني أعرف أنا حساسة جدا ليس اختراع متلازمة.أريد دائما أن البرنامج بنفسي و أنا متأكد من أنه يهدر الكثير من الوقت.ومع ذلك ، فإن هذا يعمل معي بشكل ملحوظ في كثير من الأحيان--على سبيل المثال, بدلا من استخدام القضبان (كبير جدا مشروع ويب إطار مع ORM و أدوات واجهة المستخدم الرسومية خبز في) اعتدت مجموعة من أصغر روبي أدوات مثل رف و تتمة التي تناسب معا بشكل جميل.

لذا أتوجه إليك حتى الخبراء.هل أنا ساذج ؟ هنا ما أراه:

  • استخدام C
    • سلبيات
      • ربما تجعلني أكره البرمجة
      • مخاطر عالية من إعادة اختراع العجلات
      • مخاطر عالية من أخذ طويلة بحيث لا يفقد الاهتمام
    • الايجابيات
      • حاولت & الحقيقية الأكثر A-قائمة الألعاب تتم في C (هذا لا يزال صحيحا اليوم؟)
      • مستوى عال من السيطرة على الذاكرة وإدارة السرعة وإدارة الأصول وغيرها ، الذي أثق في نفسي أن تتعلم كيفية التعامل مع
      • لا الغبار المتراكم تحت السرير
  • استخدام الإطار أو SDK
    • سلبيات
      • خطر المتضخم الناتج
      • تعتمد على الأصلي مكتبة الكتاب على جميع جوانب اللعبة التنمية-ماذا لو لم يكن هناك ميزة أريد ؟ يجب أن البرنامج بنفسي, وهي ليست سيئة ، ولكن جزئيا الهزائم الغرض من استخدام إطار رفيع المستوى في المقام الأول
      • مخاطر عالية من مشكلات في الأداء
    • الايجابيات
      • أسرع وقت التطوير
      • قد يكون من الأسهل للحفاظ على
      • لا يضيع الوقت في إعادة اختراع مشتركة النماذج

ماذا يمكن أن أضيف إلى هذه القائمة ؟ هو محض دعوة الحكم ، أو أن شخص ما ختم الصفقة بالنسبة لي ؟ كتاب اقتراحات موضع ترحيب.

هل كانت مفيدة؟

المحلول

بلدي التفكير الحالي هو:

  • إذا كنت تريد أن تتعلم برنامج البدء في صنع محرك اللعبة من عناصر القاعدة صعودا (حتى تنفيذ هياكل البيانات الأساسية - قوائم وخرائط ، إلخ).لقد فعلت هذا مرة واحدة ، في حين كانت تجربة تعلم ، لقد ارتكبت العديد من الأخطاء ، و أنا لن أفعل هذا مرة ثانية.ومع ذلك تعلم كيفية البرنامج فضلا عن جعل شيء رائع و رؤية النتائج أود أن معدل هذه الغاية.

  • إذا كنت تريد أن تجعل اللعبة المناسبة و استخدام أي من المكتبات التي تريد تصميم كل لعبة البنية التحتية نفسك.هذا هو ما أفعله الآن أنا باستخدام كل من أشياء لطيفة مثل المحكمة الخاصة بلبنان ، ATL/WTL, دفعة, سكليتي, DirectX, الخ.حتى الآن لقد تعلمت الكثير عن الوسط/لعبة المنطق الجانب من التعليمات البرمجية والتصميم.

  • إذا كنت تريد أن تجعل اللعبة مع الفنانين وغيرهم من الناس تتعاون لخلق المنتج النهائي ، استخدام أحد محركات القائمة (الغول ، Irrlicht, سديم, عزم الدوران ، الخ) فقط إضافة في اللعبة المنطق والفن.

واحد النهائي قليلا من الحكمة تعلمت أن لا تقلق حول عدم اخترع هنا متلازمة.كما كنت قد أدركت أن المكتبات الأخرى (مثل المحكمة الخاصة بلبنان ، دفعة ، دايركت ، الخ) قد أمر من حجم (أو ثلاثة) أكثر من ساعة من وقت التطوير في نفوسهم ، أكثر بكثير مما كنت يمكن أن تنفق أي وقت مضى في هذا الجزء من اللعبة/المحرك.ولذلك السبب الوحيد لتنفيذ هذه الأشياء بنفسك إذا كنت تريد أن تتعلم عنهم.

نصائح أخرى

أعتقد أنك تعمل تحت مغالطة.

هناك عدة أطر هناك خصيصا من أجل لعبة البرمجة --- مكتوبة من قبل الناس مع الكثير من الخبرة مع تعقيد لعبة تصميم, يكاد يكون من المؤكد أكثر ثا يمكنك القيام به.

وبعبارة أخرى, لديك "مخاطر عالية من الأداء القضايا" إذا كنت لا تستخدم الإطار.

وأود أن نوصي محاولة pyglet.

  • لديها الأداء الجيد ، كما أنه يستخدم opengl
  • لها مدمجة الكل في واحد المكتبة
  • فإنه لا يوجد لديه اضافية تبعيات إلى جانب الثعبان

القيام ببعض الاختبارات ، انظر إذا كان يمكنك أن تجعل سريع بما فيه الكفاية بالنسبة لك.فقط لو أنك تثبت لنفسك أنه ليس الانتقال إلى مستوى أدنى.على الرغم من أن أنا متأكد من أن بايثون + pyglet يمكن التعامل معها...في أسوأ الأحوال سيكون لديك لكتابة بضعة ج ملحقات.

اليوم أنا أعتقد أنك في نقطة حيث يمكنك بأمان تجاهل مشكلة الأداء إلا إذا كنت على وجه التحديد تحاول أن تفعل شيئا أن يدفع حدود.إذا اللعبة هو يقول لا أكثر تعقيدا من الزلزال الثاني, ثم يجب عليك اختيار الأدوات والمكتبات التي تسمح لك أن تفعل أكثر من أجل الخاص بك الوقت.

لماذا اخترت الزلزال الثاني ؟ لأنه يعمل في نسخة جمعت .صافي, ، فإنه يعمل مع برنامج العارض في أكثر من مقبول معدل الإطار على الجهاز الحالي.(إذا كنت تحب - قارن مامي الذي يحاكي معالجات متعددة و أجهزة الرسومات في معدلات مقبولة)

عليك أن تسأل نفسك إذا كنت في هذا لبناء محرك أو لبناء اللعبة.إذا كان هدفك هو خلق لعبة, يجب أن ننظر بالتأكيد في إنشاء الألعاب المحرك.عن لعبة 2D التنمية ، أنظر عزم الدوران لعبة باني.هو قوي جدا 2D الألعاب المحرك/SDK التي سوف يضع لك في الإنتاج من يوم 1.لديهم الكثير من الأدوات التي تتكامل معها ، حزم المحتوى, و يمكنك الحصول على كامل شفرة المصدر إذا كنت ترغب في إجراء تغييرات و/أو معرفة كيف يعمل.كما ماك متوافق ولها إصدارات لينكس في المجتمع.

إذا كنت تبحث عن شيء على وحدة التحكم الجانبية لديهم أيضا.

أنا مندهش ذكرها أحد XNA.في إطار بنيت حول DirectX للقيام تمكنت دايركت البرمجة أثناء إزالة الكثير من زغب و الإسهاب انخفاض مستوى دايركت البرمجة.

الحكمة معظم 2D و 3D لعبة المهام ، وخاصة بناء شيء مثل لعبة القتال ، هذا المنبر يعمل بشكل جيد جدا.لا كما بسرعة كما لو كنت تفعل المعدن دايركت البرمجة, ولكن يحصل لك قريبة جدا ، و في بيئة مدارة ولا أقل.

آخر بارد الاستفادة من XNA هي أن معظم رمز يمكن تشغيلها على أجهزة إكس بوكس 360 و حتى يمكن تصحيحه على شبكة اتصال تم تشغيل اللعبة على أجهزة إكس بوكس.XNA ألعاب يسمح الآن أن تتم الموافقة من قبل أجهزة إكس بوكس لايف فريق للتوزيع والبيع على أجهزة إكس بوكس لايف أركيد كذلك.حتى إذا كنت تبحث لاتخاذ مشروع تجاري الدولة ، قد يكون am الوسائل المتاحة التوزيع تحت تصرفكم.

مثل جميع MS تطوير أدوات التوثيق و دعم من الدرجة الأولى, و هناك عدد كبير من المطور المجتمع مع الكثير من الدروس المشاريع القائمة ، وما إلى ذلك.

هل تريد أن تكون قادرة على لعب اللعبة على التحكم ؟ هل تريد أن تفعل ذلك كما تعلم التجربة ؟ هل تريد المنتج النهائي أن يكون عبر منصة ؟ المكتبات هل نظرت إلى حتى الآن ؟

عن لعبة 2d لا أعتقد أن الأداء سيكون مشكلة ، أوصي الذهاب مع شيء التي سوف تحصل على النتائج على الشاشة في أقصر فترة من الوقت.إذا كان لديك الكثير من الخبرة في القيام الثعبان ثم pyGame هو خيار جيد.

إذا كنت تخطط على القيام ببعض الألعاب 3d في المستقبل أنصح أن نلقي نظرة على الغول (http://www.ogre3d.org).هو عبر منصة 3d الرسومات المحرك الذي ملخصات بعيدا الرسومات واجهات برمجة التطبيقات.لكن 2d المشروع ربما مبالغة.

الأكثر شيوعا تنفيذ لغة قائمة مباريات اليوم هي C++ و الكثير من الألعاب تضمين لغة البرمجة (مثل الثعبان أو لوا) لعبة الحدث البرمجة.

الأدوات التي تستخدمها لكتابة اللعبة لديها الكثير لتفعله مع أسباب كتابة هذا التقرير ، مع الاحتياجات الخاصة بك.هذا لا يختلف عن أي برمجة المشروع حقا.إذا كان المشروع الجانب, و أنت تفعل ذلك بنفسك ، عندها فقط يمكنك تقييم كم من الوقت لديك لقضاء على هذا وماذا الأداء الخاص بك الاحتياجات.

عموما اليوم أجهزة الكمبيوتر سريع بما فيه الكفاية لتشغيل منصة 2D مكتوبة في لغات البرمجة.باستخدام لغة برمجة تسمح لك النموذج الأشياء بشكل أسرع وسيكون لديك المزيد من الوقت إلى قرص اللعبة.مرة أخرى هذا لا يختلف مع أي مشروع آخر.

إذا كنت اذهب مع C++ و الأسباب الخاصة بك لا يجب أن تكون أكثر تفصيلا من "لأنني أريد أن" أود أن أقترح عليك أن ننظر SDL من أجل تقديم دعم الصوت.سيجعل الأمور أسهل قليلا.

إذا كنت ترغب في تعلم التقنيات الأساسية (دايركت أو كنت تريد أن تكتب الأمثل blitters لبعض الضارة السبب) ثم عن طريق C++.

وبعد كل ذلك, أود أن أحذرك ضد المبكرة الأمثل.عن لعبة 2D, وربما كنت سوف تكون أفضل حالا الذهاب مع الثعبان PyGame الأولى.سأكون مندهشا إذا تلك الأدوات قد تكون غير كافية على أجهزة الكمبيوتر الحديثة.

كما أن ما قاله الناس عن C/C++/بيثون ، أنا مطور اللعبة و تشجع الشركة C.لا ب/ج C++ سيء ولكن لأن مكتوبة بشكل سيئ C++ هو السم من أجل تطوير اللعبة بسبب صعوبة قراءة/debug مقارنة C.(C++ يعطي الفوائد عندما تستخدم بشكل صحيح ، ولكن دعونا صغار الرجل جعل بعض الأخطاء مع الوقت الخاص بك بالوعة ضخمة)

كما أن السؤال الفعلي:إذا كان الغرض هو مجرد الحصول على شيء العمل ، واستخدام المكتبة.

وإلا رمز بنفسك لسبب مهم جدا: الممارسة
الممارسة في التلاعب هياكل البيانات.سوف تكون هناك أوقات تحتاج إلى إدارة البيانات الخاصة بك.الممارسة في تصحيح الأداة البرمجية.

غالبا ما يبس تفعل فقط ما تريد و كبيرة, ولكن في بعض الأحيان الخاص بك استخدام محددة تعالج القضية بشكل سيء للغاية من قبل lib و سوف تكسب أنت حسنات فوائد كبيرة من الكتابة الخاصة بك.هذا هو خاصة على لوحات المفاتيح بالمقارنة مع أجهزة الكمبيوتر

(تحرير:) بخصوص النصي جمع القمامة:ذلك سوف قتل على التحكم في المباراة الأخيرة اضطررت إلى إعادة كتابة أجزاء كبيرة من القمامة جمع على غير واقعي فقط لسد احتياجاتنا في محرر جزء.حتى أكثر من ذلك كان ينبغي القيام به في اللعبة الفعلية (وليس فقط عن طريق لي) (لكي نكون منصفين ولو كنا دفع تتجاوز واقعي الأصلي المواصفات)

البرمجة في كثير من الأحيان جيدة ، ولكن ليس "أنا وين" زر.في العام المكاسب تختفي إذا كنت تدفع مقابل حدود النظام الأساسي الخاص بك.وأود أن استخدام "في المئة من الأنظمة الأساسية وحدة المعالجة المركزية التي يجب أن الفراغ" كما بلدي وظيفة التقييم في تحديد مدى ملاءمة البرنامج النصي

نظر واحدة لصالح C/C++/obj-C هو أنه يمكنك خلط وتطابق مختلف المكتبات في مختلف مجالات الاهتمام.وبعبارة أخرى ، ليست عالقة مع تنفيذ ميزة في إطار.

يمكنني استخدام هذا النهج في ألعابي;باستخدام السنجاب بالنسبة 2D الفيزياء ، لوا باعتبارها جزءا لا يتجزأ من لغة البرمجة ، openGL ES التنفيذ من شركة أبل.أنا أكتب الغراء لربط كل هذه معا في لغة C.المنتج النهائي كونه القدرة على تحديد كائنات اللعبة إنشاء مثيلات لها ، والتعامل مع الأحداث كما أنها تتفاعل مع بعضها البعض في ج وظائف تتعرض لوا.هذا هو النهج المتبع في العديد من الألعاب عالية الأداء إلى الكثير من النجاح.

إذا كنت لا تعرف بالفعل C++, أود أن أوصي بالتأكيد تذهب إلى الأمام مع لغة البرمجة.صنع لعبة من البداية إلى النهاية يأخذ الكثير من الدافع ، و إجبار نفسك على تعلم لغة جديدة في الوقت نفسه هو وسيلة جيدة لجعل الامور تسير ببطء بما فيه الكفاية أن تفقد الفائدة (على الرغم من أنه هو وسيلة جيدة لتعلم لغة جديدة...).

معظم لغات البرمجة سيتم تجميع رمز بايت على أي حال ، حتى أكبر ضرب أداء سيتم جمع القمامة.أنا لست من ذوي الخبرة ما يكفي لإعطاء وصف واضح من كم كبير ضرب جمع القمامة ، ولكن أنا أميل إلى الاعتقاد بأن ذلك لن يكون سيئا في لعبة صغيرة.

أيضا, إذا كنت تستخدم القائمة لغة البرمجة مكتبة لجعل اللعبة أكثر من الأداء المناطق الحرجة (مثل الرسومات) يمكن كتابتها في C++ على أي حال (نأمل من اللعبة المكتبات).حتى 80 ٪ من وحدة المعالجة المركزية قد يكون في الواقع قضى في C++ رمز على أي حال, على الرغم من حقيقة أن معظم من المشروع الخاص بك هو مكتوب في بيثون.

أود أن أقول, اسأل نفسك ماذا تريد أكثر من ذلك:لكتابة اللعبة من البداية إلى النهاية والتعرف على تطوير اللعبة ، أو تعلم لغة جديدة (C++).إذا كنت تريد أن تكتب لعبة تفعل ذلك في لغة البرمجة.إذا كنت تريد أن تتعلم لغة جديدة ، أن تفعل ذلك في C++.

نعم إلا إذا كنت ترغب فقط في معرفة كل التفاصيل من الأمور التي تدخل في صنع لعبة, أنت بالتأكيد تريد أن تذهب مع محرك اللعبة و التركيز فقط على بناء اللعبة المنطق بدلا من التفاصيل من الرسومات ، الصوت ، إدارة الموارد ، إلخ.

شخصيا أحب أن يوصي عزم الدوران لعبة باني (الملقب عزم الدوران 2D) من GarageGames.ولكن ربما يمكنك أن تجد بعض لعبة مجانية محركات هناك التي تناسب الاحتياجات الخاصة بك كذلك.

أنا متأكد أن معظم الألعاب الحديثة تتم في C++, لا C.(كل شركة الألعاب من أي وقت مضى أنا مقابلات مع طلب C++ الأسئلة.)
لماذا لا تستخدم C++ و المكتبات الموجودة الفيزياء + التصادم, صوت, محرك الرسومات الخ.كنت لا تزال الكتابة اللعبة, ولكن الاشياء الدنيوية هو العناية.

هناك الكثير من الحلول المختلفة مسألة التلخيص و كل من يتعامل معها بطرق مختلفة.

مشروعي الحالي يستخدم C#, DirectX 9, HLSL و SlimDX.كل هذه العروض بعناية معايرة مستوى من التجريد.HLSL يسمح لي أن قراءة الواقع تظليل الكود أكتب و SlimDX/C# يسمح لي أن تجاهل المؤشرات ، تبعيات دائرية و التعامل مع التعليمات البرمجية غير المدارة.

وقال أن أيا من هذه التقنيات لديها أي تأثير على سهولة تطوير بلدي منظمة العفو الدولية ، الإضاءة أو الفيزياء!أنا لا تزال لديها للخروج الكتب بطريقة لا مع مستوى أعلى الإطار.

حتى باستخدام إطار مثل XNA ، إذا كان معظم ألعاب الفيديو تنمية المفاهيم الأجنبية لكم هناك الكثير لا يزال لاتخاذ وتعلم.XNA سوف تسمح لك بدقة تجنب انحراف قفل ، ولكن الويل لأولئك الذين لا يفهمون الأساسية التظليل المفاهيم.من ناحية أخرى, شيء مثل DarkBASIC لن تحل انحراف قفل المشكلة ، ولكن التظليل هو الغالب التعامل معها بالنسبة لك.

انها كبيرة بما فيه الكفاية مجال أول محرك لن تكون واحدة يمكنك استخدامها في الواقع.إذا كان يمكنك كتابة ذلك بنفسك ، لن يكتب جيدا بما فيه الكفاية.إذا كنت تستخدم طرف ثالث المكتبات هناك بالتأكيد جوانب من شأنها أن أزعجك و أنت تريد أن تحل محل.

كفكرة ، قد يكون من المفيد أخذ مختلف المكتبات/أطر (بالتأكيد جعل XNA واحد من توقف الخاص بك, حتى إذا قررت أنك لا تريد استخدام إنه القياسي كبير) ومحاولة لبناء مختلف النماذج.ولعل المشهد (مع الجسم من الماء) أو الفضاء الفيزياء التجريبي.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top