السلام عليكم
أوكي سأشرح طريقة تصميم مرحلة (من نوع غرفة) بالمحرك
ولكن أولاً وأخيراً (((((((((((((( لا تفكر بالمحرك والثري دي قبل ان تبرمج ألعابك الخاصة على VB /// هذا واضح ومنطقي )))))))))))))
لماذا ؟ ليس لأنك لن تفهم حرف من الكود وليس لأنك لا تستطيع تطويره ولكن لأنك لا تستطيع إستخدام مصادر اللعبة لأنني لو وافقت أنا فلن توافق الشركة الناشرة
سأقوم بنشر أجزاء من المحرك وسأقوم بالشرح وسأقوم بتقديم الأمثلة وسأجيب على الأسئلة ولكن هذه حدودي ... لا أستطيع تقديم اللعبة كشفرة مفتوحة لأن الشركة الناشرة لن توافق على ذلك
أعتقد أنك فهمت الفكرة
نقطة أخرى : أنا أفترض أني أتعامل مع ( مبرمج VB متوسط المستوى) على الأقل وإلا ......... !
وهذا هو رأيي الحالي
+ لا تحرج الكرستال فأنا المطور الوحيد للعبة ،،،، أما الكرستال فهو ناقد مثلك 
_________________________________________________________
الشكل العام لمرحلة (غرفة)
أولاً كيفية ترتيب المراحل
لكل مرحلة هنالك دالتين
الأولى Load
والثانية Play
والفرق (او الغرض من التقسيم ) ان الدالة Load تستدعى (مرة واحدة) في بداية المرحلة وبالطبع سيكون داخلها تحميل المجسمات والأصوات وما إلى ذلك في الذاكرة (يجب أن تفهم آليه
الثري دي)
والPlay تستدعى بإستمرار حتى نهاية المرحلة
والآن قبل أن نبدأ بالأكواد يجب أن نصف المرحلة على الورق .... أليس كذلك
حسناً لدينا غرفة فيها أربعة جدران وفيها شخصيتين الأولى البطل يتحرك فيها والشخصية الثانية واقفة (ووتحرك) وعندما يتم الإصطدام يعطى الشخصية الثانية للبطل خيارات
1- لاشيء
2- الخروج من اللعبة
3- الذهاب للمرحلة رقم 2 (بإفتراض أن المرحلة التي نصممها هي 1)
حسناً نقوم بإضافة Module جديد (لغرض الترييب) ونضع فيه الدالة
كود:
Public Sub Load_Level1()
End Sub
حيث الرقم (1) يرمز لرقم المرحلة
انت الآن ربما أدرك أننا سنملأ هذه الدالة بكم من الاكواد المزعجة !
سنقوم الآن بتحميل المرحلة ....... وسنتحاج إلى :
1- وضع مكان الكمرا
كود:
Cam.Camera_Setup V3(0, 28, -50), V3(350, 0, 0)
حيث أن الوسيطة الأولى ترمز إلى موقع الكمرا في XYZ
والوسيطة الثانية ترمز إلى دوران الكمرا في XYZ
2- تحميل الأصوات في الذاكرة
كود:
Media.Music_Play App.Path & "\medias\sounds\MIDI\evil-temple.mid", 0, -1500
Sound.MD2_Walk_Init
السطر 1 : حملنا صوت في الذاكرة وال(0) يرمز إلى بداية قرائة الملف وال (-1500) حجم الصوت
السطر 2 : حملنا صوت الركض للشخصية
3- تحميل الخلفية الرئيسية للمرحلة
كود:
Sprite.Background_Create "main_back", App.Path & "/images/backgrounds/palace1.jpg"
"main_back" إسم الخلفية
الوسيطة الأخرى موقع الخلفية
4- الآن تحميل الشخصيتين
كود:
MD2.MD2_Create Firas, V3(20, 0, 10), V3(0, 260, 0), False, True
MD2.MD2_Create Kubaj, V3(0, 0, 60), V3(0, 100, 0)
Firas : متغير من نوع Enum (آمل أن تعرف ما هو Enum) ليحدد الشخصية
وحالياً هنالك 54 شخصية
V3(20, 0, 10) : مكان الشخصية
V3(0, 260, 0) : تدوير الشخصية على Y (إلى أين يقع وجه الشخصية )
False : نضع False إذا أردنا أن نجعل الشخصية غير قابلة للتصادم وهذا ينطبق على شخصية البطل
True : نضع True إذا أردنا أن نقول أن هذه هي الشخصية الرئيسية
5- تحميل الحوائط الوهمية:
كود:
Obj.Wall_Create "wall1", V3(120, 30, 30), V3(0, 0, 70), V3(0, 0, 0)
Obj.Wall_Create "wall2", V3(120, 30, 30), V3(0, 0, -10), V3(0, 0, 0)
Obj.Wall_Create "wall3", V3(120, 30, 30), V3(-40, 0, 60), V3(0, 120, 0)
Obj.Wall_Create "wall4", V3(120, 30, 30), V3(40, 0, 60), V3(0, 60, 0)
نحمل هذه الجدران حتى تصتطدم الشخصية عند ملامستها وتتوقف
الحجم , المكان , التدوير
_______________________________________________________
الآن حان وقت الدالة Play
كود:
Public Sub Play_Level1()
End Sub
الآن نقوم بعمليات التحريك وإكتشاف التصادم بما اننا في الGameLoop
1- نجعل الصوت من نوع Loop
2- نجعل البطل يتحرك داخل الغرفة
كود:
MD2.MD2_Action_WalkRoom
3- نجعل الشخصية الأخرى تتحرك بوضع الإستعداد
كود:
MD2.MD2_Action_Stand Kubaj
4- الآن نجعل حدث التصادم
كود:
If Collision.MD2_Hit_MD2(Kubaj) Then
Dialog.MultiChoise "ماذا تريد ؟", "لاشيء", "الخروج من اللعبة", "الإنتقال للمرحلة التالية", "", 250, 400, 3
If Dialog.Chooses = 1 Then Collision.MD2_Hit_MD2_ReStart
If Dialog.Chooses = 2 Then Game.GameRun = False
If Dialog.Chooses = 3 Then Game.Level_GoTo 1, 2
End If
إذا تصادم البطل مع أعرض خيارات
إعداد مربع الخيارات
400 : موضعه على X
250 : موضعه على Y
3 : عدد الخيارات
ولو إختار المستخدم إحدى الخيارات :
لو 1 : لا تفعل شيء
لو 2 : إخرج من اللعبة
لو 3 : إخرج من المرحلة 1 وإذهب للمرحلة 2
_________________________________________________________
فيصبح كامل الكود :
كود:
Public Sub Load_Level1()
Cam.Camera_Setup V3(0, 28, -50), V3(350, 0, 0)
Media.Music_Play App.Path & "\medias\sounds\MIDI\evil-temple.mid", 0, -1500
Sound.MD2_Walk_Init
Sprite.Background_Create "main_back", App.Path & "/images/backgrounds/palace1.jpg"
MD2.MD2_Create Firas, V3(20, 0, 10), V3(0, 260, 0), False, True
MD2.MD2_Create Kubaj, V3(0, 0, 60), V3(0, 100, 0)
Obj.Wall_Create "wall1", V3(120, 30, 30), V3(0, 0, 70), V3(0, 0, 0)
Obj.Wall_Create "wall2", V3(120, 30, 30), V3(0, 0, -10), V3(0, 0, 0)
Obj.Wall_Create "wall3", V3(120, 30, 30), V3(-40, 0, 60), V3(0, 120, 0)
Obj.Wall_Create "wall4", V3(120, 30, 30), V3(40, 0, 60), V3(0, 60, 0)
End Sub
Public Sub Play_Level1()
Media.Music_Loop
MD2.MD2_Action_WalkRoom
MD2.MD2_Action_Stand Kubaj
If Collision.MD2_Hit_MD2(Kubaj) Then
Dialog.MultiChoise "ماذا تريد ؟", "لاشيء", "الخروج من اللعبة", "الإنتقال للمرحلة التالية", "", 250, 400, 3
If Dialog.Chooses = 1 Then Collision.MD2_Hit_MD2_ReStart
If Dialog.Chooses = 2 Then Game.GameRun = False
If Dialog.Chooses = 3 Then Game.Level_GoTo 1, 2
End If
End Sub
آمل أن يكون الشرح واضح ومفهوم 
+++ تذكر هذا دائماً :
1- لن تستفيد من المحرك حتى تصبح مبرمج VB
2- لا أستطيع أن أجعل اللعبة Open Source - لأن اللعبة تجارية
3- لا تستطيع إستخدام مصادر اللعبة - لأن اللعبة تجارية
4- لا تستطيع إستخدام الأكواد الجاهزة التي برمجتها أنا بطريقة نسخ ولصق
=== المحرك درس شامل لا أكثر
بالتوفيق