الشبكة العربية لمطوري الألعاب

خبير مدير وسام البهنسي مشاركة 1

السلام عليكم،
 
في هذه المهمة نودّ برمجة مجموعة أصناف تقوم ببعث مركبات الأعداء على الحافة البعيدة من الأنبوب وفي أماكن مختلفة كل فترة، وهذه المركبات تسير على الأنبوب قدماً نحو الحافة التي يقف عليها اللاعب.
 
حالياً سنكتفي بجعل هؤلاء الأعداء يموتون (يختفون) حال وصولهم للحافة المقابلة.
 
يمكننا تمثيل مركبات الأعداء بمكعب بسيط إلى أن تصلنا المجسمات من فريق الرسوميات.
 
والآن، من لها؟ ☺

وسام البهنسي
مبرمج في إنفيديا وإنفريمز

مبتدئ  Ali Amin مشاركة 2

السلام عليكم ,


هل يمكني ان اخذ هذه المهمة☺ ؟

خبير مدير وسام البهنسي مشاركة 3

في 08/ذو الحجة/1431 10:25 ص، غمغم Ali Amin باستغراب قائلاً:

السلام عليكم ,


هل يمكني ان اخذ هذه المهمة☺ ؟

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

وسام البهنسي
مبرمج في إنفيديا وإنفريمز

مبتدئ  Ali Amin مشاركة 4

حسنا فعلت المهمة  و الحمد لله


حاولت ان ارفع الكود و لكن حصل خطأ هل هذا لأن اسم المستخدم الذي لدي ليس من ضمن الفريق ؟


اسم المستخدم هو 


AliAmin
او
Ali_Amin




بانتظارك

خبير مدير وسام البهنسي مشاركة 5

وفي 08/ذو الحجة/1431 07:39 م، قال Ali Amin متحمساً:

حاولت ان ارفع الكود و لكن حصل خطأ هل هذا لأن اسم المستخدم الذي لدي ليس من ضمن الفريق ؟


اسم المستخدم هو 


AliAmin

لقد قمتُ بإضافة AliAmin إلى الفريق. جرب الآن. يجب أن يظهر لك صندوقاً يطلب اسم المستخدم وكلمة السر عند الرفع.

وسام البهنسي
مبرمج في إنفيديا وإنفريمز

مبتدئ  Ali Amin مشاركة 6

تم رفع النسخة


آسف لرفع اكثر من نسخة عن طريق الخطأ لجعلي بcodeplex 


بانتظار تعليقاتك على الكود


ملحوظة : لقد قمت بأضافة المتغير gameTime و قد علمت انه تم حذفه من قبل , هذا المتغير قد يكون ثابت في اغلب الاحيان و لكن لو قلت عدد الframes اقل من 60 لأي سبب فسيكون هذا المتغير مفيد

خبير مدير وسام البهنسي مشاركة 7

في 09/ذو الحجة/1431 07:00 ص، غمغم Ali Amin باستغراب قائلاً:

آسف لرفع اكثر من نسخة عن طريق الخطأ لجعلي بcodeplex 

لا بأس. لقد أزلتُ الملفات التجريبية التي رفعتَها من غير قصد.
 



بتاريخ 09/ذو الحجة/1431 07:00 ص، قطب Ali Amin حاجبيه بشدة وهو يقول:

بانتظار تعليقاتك على الكود

ملحوظة : لقد قمت بأضافة المتغير gameTime و قد علمت انه تم حذفه من قبل , هذا المتغير قد يكون ثابت في اغلب الاحيان و لكن لو قلت عدد الframes اقل من 60 لأي سبب فسيكون هذا المتغير مفيد

الكود ممتاز ما شاء الله. لكن بالنسبة للمتغير gameTime، إقرأ المشاركات بدءاً من رقم 36 في هذا الموضوع: 
http://www.agdn-online.com/communities.aspx?view=posts&threadid=801
 
لذلك فقد قمتُ بإزالته مرة أخرى ... آسف  ☺
 
 
المهم أحسنت وعمل ممتاز يا علي. الآن لننتقل للمرحلة الثانية في هذه المهمة. كشف التصادم بين الطلقات ومركبات الأعداء. إن وُجد التصادم، فقم بإزالة مركبة العدو فوراً (كما يحدث لو وصلت إلى حافة الأنبوب).
 
لاحظ أننا سنكتفي بكشف التصادم بين كرتين مبدئياً. الكرة الأولى تمثل الطلقة، والكرة الثانية تمثل مركبة العدو.
 
بالتوفيق!

وسام البهنسي
مبرمج في إنفيديا وإنفريمز

مبتدئ  Ali Amin مشاركة 8

حسنا فكرت كيف انجز هذه المهمة , هل اضع تحقق التصادم في صنف الأعداء ام الطلقات 


وجدت انه كحل أفضل ان اضع صنف جديد يقوم بالتحقق بالاصطدام للعبة كلها ثم يرسل التعديلات الى جميع الاصناف


و يمكن ايضا ان نضيف كرة التصادم  (bounding sphere) كأحد خصائص كل صنف منهم , و لكنني لم احبذ هذه الطريقة


من المؤكد هناك الف طريقة لعمل اي شىء و انا اخترت هذه , اي تعديل انا جاهز إن شاء الله


و لكني لاحظت مشكلة و هي ان الاعداء تظهر من مكان واحد فلو وقف اللاعب في اي مكان واستمر في الضرب فلن يواجه اي عدو , فما الحل ؟

خبير مدير وسام البهنسي مشاركة 9

في 09/ذو الحجة/1431 02:25 م، عقد Ali Amin حاجبيه بتفكير وقال:

وجدت انه كحل أفضل ان اضع صنف جديد يقوم بالتحقق بالاصطدام للعبة كلها ثم يرسل التعديلات الى جميع الاصناف

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


وفي 09/ذو الحجة/1431 02:25 م، قال Ali Amin متحمساً:

و لكني لاحظت مشكلة و هي ان الاعداء تظهر من مكان واحد فلو وقف اللاعب في اي مكان واستمر في الضرب فلن يواجه اي عدو , فما الحل ؟

حسناً يجب علينا كتابة صنف خاص نسميه "الباعث EnemySpawner" هو المسؤول عن بعث الأعداء من النوع المناسب في المكان المناسب وفي الوقت المناسب. هذا الصنف مبدئياً نجعله يبعث عدو من صنف واحد دائماً وفي أماكن عشوائية كل فترة ثابتة من الزمن. هذا الصنف يتم استخدامه من قبل مدير الأعداء EnemyManager. 
توكل على الله...

وسام البهنسي
مبرمج في إنفيديا وإنفريمز

مبتدئ  Ali Amin مشاركة 10

حسنا حللت المشكلة و الحمدلله


الحل يكمن في خلق العدو بعيدا عن منطقة المنتصف بثلاث خطوات , حسب اتجاهه , بوضع هذه الجملة :




  position = GameLevel.Current().GetTubePosition() + (direction * 3);