[دروس] إطار جيد للتعامل مع Irrlichtcp رسم صوت وفيزياء معا مقدمة لاستعمال IrrlichtFramework

الناقل : elmasry | الكاتب الأصلى : DreamNet | المصدر : www.arabteam2000-forum.com

السلام عليكم ورحمة الله وبركاته

رغم أن الموضوع يندرج دائما تحت إطار المحرك irrlicht إلا أنني سأحاول قدر الإمكان تغيير أسلوب الطرح واستدراك بعض الأشياء التي قد يكون الموضوع الأول يحتاجها :blink:

لتحميل المكتبة

ملف مرفق  irr.zip (1.14ميجا بايت )
عدد مرات التحميل : 280

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

لذلك سنرى اليوم التنظيم الذي جاءت به هذه المكتبة والتسهيل أيضا

عند إدراجنا لمرجع المكتبة سنرى أنها تحمل 5 فضاءات للأسماء
فضائين موجودين أصلا في المحرك irrlichtCP و وفضائي الصوت والفيزياء وفضاء للإطار المشترك بينهم
يوفر فضاء الإطار المشترك Framework (ليس هو الفريمورك للدوت نت :) ) فئات مشتركة خصوصا فئات الأحداثيات التي تغنينا عن التحويل لتوحيد معايير القياس بين فضاءات الأسماء الأخرى وفئين خاصين وفرهما صاحب المكتبة لتسهيل الكود وللاستفادة من مميزات الوراثة هما game و entity

الفئة Game : وتحمل جميع متغيرات اللعبة وهي قابلة للوراثة
الفئة Entity : تقوم بتحميل كل كيانات داخل اللعبة وهي عبارة عن collection

طيب لقد أطلنا الكلام هذه المرة لنرى كيف يمكننا البدأ بالتطبيق
بعد اداراج المرجع الخاص بالمكتبة للمشروع المنشئ وليكن console
نضيف للمشروع كلاس ونسميها مثلا myGame
لكي نرى فائدة وجود الفئة Game نقوم بعمل توريث لها لفئتنا myGame

Public Class myGame
        Inherits Framework.Game

End Class

الآن يمكن استدعاء دوال الفئة بعد وراثتها
الآن يمكننا تجهيز لعبتنا انطلاقا من هذه الفئة علينا فقط إدراج الأمر للتشغيل عند انشاء هذه الفئة لذلك يجب اضافة new
Public Sub New()
                Run()
 End Sub

فقط بكتابة هذا الأمر فان المحرك قد تم تجهيزه للعمل انطلاقا من هذه الفئة :shock:
لم تصدق :!:
تعال واكتب في الmain لمشروعك كود انشاء نسخة من الفئة mygame
Dim test As myGame = New myGame

شغل البرنامج فقط وسترى

لقد كتبنا 3 أسطر فقط

الآن نريد أن نضيف كائن داخل اللعبة بعد اضافة كاميرا وهنا نريد الاستفادة من الفئة Entity والتي يجب توريثها مثلها مثل الفئة Game
مثلا نريد اضافة مكعب داخل اللعبة لذلك نقوم باضافة class جديدة لبرنامجنا ولنسميها مثلا mBox
Imports Framework
Imports Framework.Irrlicht
Public Class mBox
        Inherits Framework.Entity
        Private m_node As SceneNode = Nothing
        Public Sub New(ByVal mgame As Game)
                MyBase.New(mgame)
                Dim texture As Texture = Game.VideoDriver.GetTexture("box.png")

                m_node = mgame.IrrlichtDevice.SceneManager.AddCubeSceneNode(19, Nothing, -1)
                m_node.SetMaterialFlag(MaterialFlag.Lighting, False)
                m_node.SetMaterialTexture(0, texture)
                m_node.Position = New Vector3D(10, -10, 70)
        End Sub
End Class

ماقمنا بعمله هو فقط انشاء مكعب داخل اللعبة ولو لاحظتم أن عند الانشاء في الإجراء New توجب علينا ادراج متغير من النوع Game لكي يتم اضافتها داخل اطار اللعبة المنشئة طبعا
نرجع إالى فئتنا myGame لكي نرى كيف نضيف هذا الكيان للعبة
طبعا قبل اضافته نضيف كاميرا أولا ثم نستعمل الخاصية Entities والتي هي مجموع الكيانات المحتواة داخل اللعبة لاضافة الكيان الجديد mBox الذي انشئناه
SceneManager.AddCameraSceneNodeFPS(Nothing, 300, 300, False)
 Entities.Add(New mBox(Me))

ثم نشغل اللعبة Run

هذا كل شئ فقط هناك ملاحظة
عند تشغيل اللعبة باستدعاء الأجراء New في الفئة myGame لم نحدد خصائصها لذلك يتم التشغيل بالخصائص الافتراضية والتي هي OpenGL و أبعاد (640, 480) يمكننا تغيير هذه الخصائص باعادة صياغة الفئة باضافة
تعديل بسيط
Public Sub New(ByVal dtype As DriverType)
                MyBase.New(dtype, New Dimension2D(640, 480), 32, False, False, False, False)

                SceneManager.AddCameraSceneNodeFPS(Nothing, 300, 300, False)
                Entities.Add(New mBox(Me))
                Run()
        End Sub


هنا يجب اعادة كتابة انشاء الفئة بتحديد نوع drivetype

Dim test As myGame = New myGame(Framework.Irrlicht.DriverType.Direct3D9)





مرفق مثال لتطبيق الدرس
ملف مرفق  Tut_irrlichtFramwork1.zip (997.62كيلو )
عدد مرات التحميل : 1835
كل عام وأنتم بخير