محرك اللعبة ثلاثي الأبعاد لمحاكاة العالم المتصلة بالشبكة / صندوق الرمل AI [مغلق

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

سؤال

منذ أكثر من 5 سنوات كنت ألعب مع DirectSound و Direct3D ووجدت أنه مثير حقًا على الرغم من أن الأمر استغرق الكثير من الوقت للحصول على بعض النتائج الجيدة مع C ++. كنت طالب جامعي بعد ذلك. الآن لديّ خبرة في مجال تطوير المؤسسات في C# و PHP ، وأنا أفعل ذلك من أجل العيش. لا توجد فرصة حقًا لكسب المال مع تطوير ألعاب خطيرة في بلدنا. كل يوم وأكثر أجد أنني أفتقد شيئًا. لذلك قررت قضاء ساعة أو نحو ذلك كل يوم للقيام برمجة من أجل المتعة.

لذا فإن فكرتي هي بناء محاكاة عالمية. أود أن أبدأ بشيء بسيط - بعض المخلوقات التي تشبه الإنسان التي تعيش حياتها - مثل Sims 3 ولكن الاحتياجات الأساسية الأكثر بساطة ، فقط ، الرسوم المتحركة الأساسية ، الحد الأدنى من الأصول الرسومية - أعتقد أنها لن تكون مدينة ولكن مجرد أ منزل كبير لبدء. تتمثل الفكرة في أن يكون لديك نوع من تطبيق الخادم الذي يخزن بيانات العالم في قاعدة بيانات MySQL ، وبعض تطبيقات العميل - روبوتات منظمة العفو الدولية التي لا تحاكي الحركة وبعض التفاعلات مع العالم وبعضها البعض. لكنها لن تكون ممتعة بدون ثلاثي الأبعاد. لذلك هناك عملاء ثلاثي الأبعاد أيضًا - يمكنني الدخول إلى هذا العالم الافتراضي ورؤية Bots Ai Living. عندما يدخل الروبوت المنطقة المرئية ، يصبح مادة - يحمل شبكة ورسوم متحركة ، حتى أتمكن من رؤيتها. عندما أغادر ، تفقد الروبوتات أجسادها ثلاثية الأبعاد مرة أخرى ، لكن حياتهم الافتراضية لا تزال مستمرة.

مع مرور الوقت ، آمل أن أجعله مثل بعض صندوق الرمل القابل للتوسعة لتجربة العديد من خوارزميات الذكاء الاصطناعي وما إلى ذلك. لكنني لست مقصودًا إنشاء MMORPG كامل: د

لقد بحثت عن العديد من الأشياء الممكنة التي سأحتاجها (مجاني ومفتوح المصدر) والآن لا بد لي من الاختيار:

  • Ogre3d + enet (أو raknet). القديم جيد C ++. لكن ألا يبطئني كثيرًا لدرجة أنني لن أستمتع بعد الآن؟

  • مساحة البلورات. رسميا ليس محرك لعبة ولكن قريب جدا من ذلك. C ++ مرة أخرى.

  • Mogre (Wogre3D Wrapper for .NET) + Lidgren (مكتبة الشبكات المستخدمة بالفعل في بعض مشاريع الألعاب). جيد - أحب C#، إنه أمر جيد للبرمجة السريعة ويمكن أيضًا استخدامه للبرمجة النصية.

  • يبدو XNA مجرد إطار عمل ، وليس محركًا ، لذلك لدي شكوك حقًا ، هل يجب أن أنظر إلى XNA Game Studio :(

  • Panda3d - محرك اللعبة الكامل مع ردود فعل إيجابية. أحب حقًا أن يكون لديك كل مجموعة الأدوات في حزمة واحدة ، ولها مراجعات جيدة كمحرك صديق للمبتدئين ... إذا كنت تعرف Python. على جانب C ++ ، لدى Panda3D وثائق غير موجودة تقريبًا. لديّ خبرة 0 مع بيثون ، لكنني سمعت أنه من السهل التعلم. وإذا كان الأمر ممتعًا وصعبًا ، فأعتقد أنني سأستفيد من التجربة بلغة برمجة أخرى.

أي من تلك التي تقترحها ، ليس بسبب الميزات المتقدمة أو دعم منصة جيدة ولكن في الغالب من أجل المتعة وسهولة سير العمل وإمكانية التوسيع ، وبالتالي أتمكن تطبيق العميل؟

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

المحلول

إذا كنت تحب Python ، فهناك روابط لـ Ogre. الدفع بيثون أوجر. لقد استخدمته قليلاً ويبدو أنه مستقر بما يكفي لاستخدامه. ومع ذلك ، ستواجه الخطأ العرضي لأن قاعدة المستخدمين ليست كبيرة.

لدي المزيد من الخبرة مع Plain C ++ Ogre ، والتي أستمتع بها كثيرًا. لا أعتقد أنه سيؤدي إلى إبطائك كثيرًا. يبدو أن مشروعك يمكن أن يتوسع إلى مستوى كبير ، وستحتاج إلى الكثير من الأداء للقيام بذلك. في هذه الحالة ، ليس C ++ خيارًا سيئًا أبدًا.

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

نصائح أخرى

لقد استخدمت XNA فقط ، لذلك لا يمكنني حقًا أن أعطيك مقارنة جيدة مع الآخرين. سأقول أنه في حين أن XNA مجرد إطار ، Torquex 3D هو محرك. يمكنك الوصول إلى ثنائيات المحرك Torquex 2D و 3D عند التسجيل لتطوير XNA (100 دولار في السنة).

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

من الواضح أن تجربتك مع C# ستكون مفيدة للغاية. سيكون عليك الالتزام بتطوير Windows ، لأنك لن تتمكن من الوصول إلى مكدس الشبكة (أو قاعدة البيانات) على Xbox 360.

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

أعتقد أن الأمر يستحق وقتك لإلقاء نظرة عليه على أي حال ومقارنته بالآخرين. أعتقد أنه يمكنك تنزيل تجربة مجانية (30 يومًا) حتى دون الاشتراك في XNA إذا كنت ترغب في اللعب بها. حظا طيبا وفقك الله!

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

باستخدام InnoDB ، يمكنك جعل الجداول شيء مثل SQL الخاص بي قد يكون إيقاف التشغيل ولكن هذا يعطي الفكرة:

create table `vertex` (
  `id` bigint(15) not null auto_increment,
  `when` timestamp default now() not null,
  `x` number not null,
  `y` number not null,
  `z` number not null,
  `cR` number default 0.0 not null,
  `cG` number default 0.0 not null,
  `cB` number default 0.0 not null,
  `cA` number default 1.0 not null,
  `u` number default 0.5 not null,
  `v` number default 0.5 not null
) primary key (id) ENGINE=InnoDB;

create table triangles (
  `p1` bigint(15) not null references (vertex.id) on delete restrict on update cascade,
  `p2` bigint(15) not null references (vertex.id) on delete restrict on update cascade,
  `p3` bigint(15) not null references (vertex.id) on delete restrict on update cascade,
  `when` timestamp default now() not null
) primary key (p1,p2,p3) ENGINE=InnoDB;

المعرف هو معرف Vertex عندما يكون الطابع الزمني يتيح لك إجراء تصحيحات تحديث x و y و z هي نقطة قمة ثلاثية الأبعاد CR ، CG ، CB ، CA هي RGBA Vertex Color U ، V هي تنسيق نسيج Vertex P1 ، P2 ، P3 الرجوع إلى Vertexes في جدول Vertex لتشكيل مثلثات كما هو موضح في تلك المراجع الرئيسية الخارجية ... يتيح لنا InnoDB منع قمة القمة غير المحددة (أي: الاتساق) المرتبطة بها ، لذلك قد تستخدمها أيضًا. إذا كان من المقبول إزالة جميع المثلثات باستخدام قمة محذوفة في وضعك ، فإن تغيير "تقييد" إلى "سلسلة" (تقيد يجعل من الخطأ حذف قمة مع مثلثات تستخدمه)

أما بالنسبة لخوارزمية شبكة BOT ، فأنت في الأساس تقوم بتنفيذ LOD CULL للبروتات غير المعروضة. العديد من المحركات قادرة بالفعل على القيام بذلك من أجلك بالفعل. على سبيل المثال ، يمكن صنع جميع شبكات Bot's Skinning/Animation أطفالًا على الكائن الخارجي للروبوت في Panda3D وما إذا كان الكائن الخارجي الروبوت قد تم إعدامه من النطاق المرئي ، فلا يتم الإشارة إلى أي من الأطفال على الإطلاق.

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