بتـــــاريخ : 2/28/2011 1:36:36 AM
الفــــــــئة
  • الحـــــــــــاسب
  • التعليقات المشاهدات التقييمات
    0 1070 0


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

    الناقل : elmasry | العمر :42 | الكاتب الأصلى : 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
    كل عام وأنتم بخير

    كلمات مفتاحية  :

    تعليقات الزوار ()