السلام عليكم ورحمة الله وبركاته رغم أن الموضوع يندرج دائما تحت إطار المحرك irrlicht إلا أنني سأحاول قدر الإمكان تغيير أسلوب الطرح واستدراك بعض الأشياء التي قد يكون الموضوع الأول يحتاجها لتحميل المكتبة 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.GameEnd Class
Public Sub New() Run() End Sub
Dim test As myGame = New myGame
Imports FrameworkImports Framework.IrrlichtPublic 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 SubEnd Class
SceneManager.AddCameraSceneNodeFPS(Nothing, 300, 300, False) Entities.Add(New mBox(Me))
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
Dim test As myGame = New myGame(Framework.Irrlicht.DriverType.Direct3D9)