المرجع ليس موجودا في هذا الملف irrlicht.dll ولكن في Irrlichtframework.dl
أما بالنسبة للموضوع الأول فالمرجع موجود في الملف Irrlicht.NET.dll
المرجع ليس موجودا في هذا الملف irrlicht.dll ولكن في Irrlichtframework.dl
أما بالنسبة للموضوع الأول فالمرجع موجود في الملف Irrlicht.NET.dll
أحب أن أضيف شئ مهم
الملمف Irrlicht.dll الموجود مع هذه المكتبة irrlichtframework يختلف عن الملف الموجود مع Irrlicht.NET
انسخ الملف irrlicht.dll الموجود مع هذه المكتبة واستبدله بالموجود داخل الsystem32 والذي أظنه هو الذي يحدث المشكل الأول
تم تعديل هذه المشاركة بواسطة DreamNet في 22 ديسمبر 2007 في 20:37
بعدما تطرقنا للحديث عن استعمال المكتبة بشكل مبسط والهيكل العام لها ثم تطرقنا إلى المحرك الفيزيائي المدرج معها بسرعة أحببت أن أضيف وبسرعة أيضا الحديث عن الصوت وهنا تم ادراج المكتبة OpenAL مع المكتبة
مثل ما رأينا في السابق نبدأ بانشاء كلاس للعبة أو المثال والتي تكون موروثة من الفئة Game
عندما نتحدث عن الأصوات في الألعاب بشكل عام يكون علينا انشاء مصدر للصوت SoundSource
وعنصر مستمع للصوت نسميه Listener
نطبق نفس المثال الموجود على المكتبة لكن بشكل أبسط
ننشئ Entity تحمل مكعب يدور ويمثل بالنسبة لنا مصدر الصوت SoundSource
وننشئ Entity أخرى تحمل كاميرا وتمثل بالنسبة لنا العنصر المستمع Listener
الكيان الخاص بمصدر الصوت وهو المكعب ننشئ له حركة دوران لكي نتأكد من أن الصوت الناتج يقترب من الحقيقة وأنه stereo مزدوج وليس أحادي
الفئة الخاصة بالمكعب ستكون بالشكل التالي
Imports Framework
Imports Framework.Irrlicht
Imports Framework.OpenAL
Public Class sBox
Inherits Entity
Private m_cube As SceneNode = Nothing
Private m_sound As SoundSource = Nothing
Sub New(ByVal g As Game)
MyBase.New(g)
m_cube = g.SceneManager.AddCubeSceneNode(30, Nothing, -1)
m_cube.SetMaterialTexture(0, g.VideoDriver.GetTexture("box.png"))
m_cube.SetMaterialFlag(MaterialFlag.Lighting, False)
m_cube.AddAnimator(g.SceneManager.CreateFlyCircleAnimator(New Vector3D(), 200, 0.001))
m_sound = New SoundSource(New SoundBuffer("mono.wav"), 100, 2000)
m_sound.Looping = True
m_sound.Play()
End Sub
Overrides Sub Update(ByVal time As Single)
m_sound.Position = m_cube.Position
End Sub
Overrides Sub Dispose()
m_cube.Dispose()
m_sound.Dispose()
End Sub
End Classأما الكيان المستمع والذي يمثل الكاميرا تكون بالشكل
Imports Framework Imports Framework.Irrlicht Imports Framework.OpenAL Public Class mCam Inherits Entity Private cam As CameraSceneNode Sub New(ByVal g As Game) MyBase.New(g) g.IrrlichtDevice.CursorControl.Visible = False g.IrrlichtDevice.WindowCaption = "IrrlichtFramework Audio Test" cam = g.SceneManager.AddCameraSceneNodeFPS(Nothing, 300, 300, False) End Sub Overrides Sub Update(ByVal time As Single) Dim Listener As Listener = New Listener() Listener.Position = cam.Position Listener.Orientation = New Orientation(cam.Target - cam.Position, cam.UpVector) End Sub End Class
لو رجعنا إلى الكود قليلا سنجد أننا لانشاء مصدر صوت استعملنا الفئة SoundSource لتعريف متغير يقوم بتشغيل الملف الصوتي وربطنا مكانه بالمكعب في السطر
m_sound.Position = m_cube.Position
ومن جهة أخرى فقد استعملنا الفئة Listener لانشاء متغير يقوم بالاستماع للصوت الثلاثي الأبعاد مربوط بموضع الكاميرا الحالية
ملاحظة هامة :
تكلمنا عن الملفات irrlicht.dll و OpenAl32.dll وكذلك Newton.dll والمفروض نسخها إلى مجلد windows\system32
ولاستعمال الصوت بسكل صحيح يجب أن لاننسى الملف wrap_oal.dll وهو تغليف لاستعمال داول OpenAL وبدونه فلن يعمل الصوت هنا
يمكن نسخه أيضا إلى الsystem32
نرجع إلى الفئة myGame ستتكلف باضافة الكيانين (الكاميرا والمكعب ) داخل اللعبة
Imports Framework Public Class myGame Inherits Game Public Sub New() Entities.Add(New mCam(Me)) Entities.Add(New sBox(Me)) Run() End Sub End Class
تطبيق الدرسAudioTest.zip
الحمد لله المثال عمل بدون مشاكل
لكن مثال Vb_quake3_map لم يعمل سوف ابدأ الدروس من الأول كى الحق بكم
اشكرك اخى الكريم DreamNet

sayedf1 كتب:السلام عليكماخى العزيز DreamNet لى سؤال بأى برنامج ارسم map مثل الmap التى فى مثال Quake3
هذا يعني أنك استطعت تشغيل مثل الquake :clapping:
في الحقيقة لست مهمتم بالDesign كثيرا لانه اختصاص صعب علي :) لكن قرأت في هذا الرابط عن أدوات مساعدة هنا
ملاحظة : أنا لم أجرب البرنامج المذكور
لذلك أطلب منك تجربته واعطائنا رأيك فيه
بالتوفيق ان شاء الله
تم تعديل هذه المشاركة بواسطة DreamNet في 24 ديسمبر 2007 في 10:08
السلام عليكم
نعم لقد عمل مثال quakeلكن بالمكته ولكن المحرك الذى فى موضوعك الأول فشلت كل محاولاتى فى ان يعمل انظر الصوره يبدو ان الصور التى ارفقتها لتوضيح جعلت الصفحات تفتح ببطء سوف احزفها.
تم تعديل هذه المشاركة بواسطة sayedf1 في 25 ديسمبر 2007 في 07:18

لا بدا أنك تستعمل الملف Irrlicht.NET.dll الموجود مع ملفات Dlls الذي أرفته في المشاركة الأولى وهو مرجع IrrlichtNETCP
لكي تعمل الأمثلة للموضوع الأول استعمل الملف الذي يأتي مع الSDK الرسمية للمحرك وهو Irrlicht.NET.dll مع المحافظة على الملفات الأخرى التي نحتاجها للتغليف

استعمل هذا الملف للمرجع وستلاحظ الفرق في الحجم أيضا Irrlicht.NET.zip
تم تعديل هذه المشاركة بواسطة DreamNet في 24 ديسمبر 2007 في 21:21
تمام اخى دريم نت اشتغل اشكرك جدا
* قرات فى الموقع انه يمكن ان احمل ملف mesh *.3ds فكيف ذلك؟
* لاحظت فى مثال quke ان حدث الضغط على لوحة المفاتيح غير موجود كيف لى ان اغير وظائف المفاتيح
الأسئله كثير وانا متعجل ولا اريد ان ألغبط ترتيبك للدروس. فأنا اريد ان اعمل لعبه ومتعجل قليلا
ان كان عندك وقت ابعتلك الأسئله التى اريدها كى تساعدنى فيها وأكون شاكر جدا
تم تعديل هذه المشاركة بواسطة sayedf1 في 19 سبتمبر 2016 في 21:10

ادارج mesh سواء كان ملف ديركت اكس أو ملف 3ds بنفس الطريقة
بالنسبة للأحداث لقد تحدثنا عنها في الموضوع الأول وهذا الموضوع أيضا
لا بأس يمكنك ارسال الأسئلة مع تحديد المكتبة التي ستسعملها وأنا أفضل استعمال هذه المكتبة فهي سهلة مرتبة وبها امكانية استعمال الصوت والفيزياء
السلام عليكم
لقد جربت هذه الطريقه ولم يشتغل المثال
وهذا هو الكود
GameDevice.FileSystem.WorkingDirectory = "media"
GameDevice.FileSystem.AddZipFileArchive("backgammon.3ds", True, True)
Dim mesh As AnimatedMesh = GameDevice.SceneManager.GetMesh("20kdm2.bsp")
Dim node As SceneNode = GameDevice.SceneManager.AddOctTreeSceneNode(mesh.GetMesh(0), _
Nothing, 0, 128)
تم تعديل هذه المشاركة بواسطة sayedf1 في 25 ديسمبر 2007 في 00:18

الدالة AddZipFileArchive تعمل على الملفات المضغوطة
يعني اذا أردت كل ملفات الميديا التي تحتاجها اللعبة تضغطها في ملف وأردت استخراجها استعمل هذه الدالة ليتم التعامل مباشرة مع الملفات الموجودة داخل ملفنا المضغوط
يعني الملف backgammon.3ds ليس ملف مضغوط أكيد.
لاحظ معي هذا السطر
Dim mesh As AnimatedMesh = GameDevice.SceneManager.GetMesh("20kdm2.bsp")الملف ذو الامتداد BSP هو الLevel الخاص بالquake واذا فتحت الملف map-20kdm2.pk3 المضغوط باستعمال الوينرار ستجد بداخله هذا الملف يعني المشهد حملناه في هذا السطر
لذلك عليك استبدال 20kdm2.bsp بملفك الbackgammon.3ds وسيعمل المثال ان شاء الله
لا أعرف كيف أنشأت ملف الديركت اكس الخاص بك والذي يمثل الحجرة لكن في العادة يكون الاكساء يتبع الملف بطريقة معينة وأظنك حولته من ال3ds إلى ملف ديركت اكس
المحرك يدعم ملفات ال3ds لكن نسيت أي اصدار بالضبط لكن كان لدي عدة أمثلة منها كيفية تحميل ملفات ال3ds للاصدارات الجديدة على irrlicht لكن القرص الصلب الذي كان فيه جل الأمثلة توقف
اضافة إلى ذلك فأنا جربت تعطيل الاضاءة لانها مفعلة افتراضيا على الmesh أو ال scenenode وبدون مصدر ضوء لا يظهر شئ
لكن المشكل في الاكساءات فهي غير مطبقة على الشكل
node.SetMaterialFlag(MaterialFlag.Lighting, False)
يمكنك استخدام بعض أداوت التصميم والتي ذكرتها في السابق ويمكنك استخدام أيضا IrrEdit لتحرير مراحل ورؤية النتيجة مباشرة ثم حفظها
كما قلت في السابق أنا ضعيف في التصميم وليس لدي أي خبرة لكن قد أفيدك في استعمال هذا المحرك :)
السلام عليكم
اخى العزيز DreamNet لقد نجحت فى استخدام الأحداث ولكن فى مثال quke3 تتحرك الكاميره بالأسهم والماوس اريد ان اللغى حركة الماوس واغير مفاتيح الحركه من الأسهم الى اى مفتاح اخر

الأسئله كثيره :hmm:
فى مثال Quake3 اريد ان اجعل اللعبه فى full screen واحدد الديركت اكس بدل الأوبن جى ال
:ty:

بالنسبة للتخصيص فقد تكلمت عليه
فقط عند انشاء فئة من Game نستدعي الأمر الأساسي للانشاء من MyBase
Public Sub New() MyBase.New(DriverType.Direct3D9, New Dimension2D(640, 480), 32, True, False, False, False) IrrlichtDevice.WindowCaption = "Quake 3 Level Sample With IrrlichtFramework" Dim quakeLevel As New QuakeLevel(Me) Dim myCamera As New myCam(Me) Entities.Add(quakeLevel) Entities.Add(myCamera) Run() End Sub
لاحظ أننا عندما نكتب MyBase.New سنجد طريقتين منها نحدد الديركت اكس ونغير قيمة fullscreen إلى true
اما بالنسبة لتغيير المفاتيح فيمكن انشاء كامير بادراج متغير Keymap نقوم بتغيير المفاتيح الأساسية فيه وعليه فستكون فئة الكاميرا كالتالي
Dim mm As New KeyMap mm.AssignAction(KeyAction.MoveBackward, KeyCode.Key_S) mm.AssignAction(KeyAction.MoveForward, KeyCode.Key_Z) mm.AssignAction(KeyAction.StrafeLeft, KeyCode.Key_Q) mm.AssignAction(KeyAction.StrafeRight, KeyCode.Key_D) Dim cam As CameraSceneNode = myGame.SceneManager.AddCameraSceneNodeFPS(Nothing, 250, 250, False, mm)
مرفق للمثال بالتعديل يمكنك مراجعته Quake_Simple.zip
وبالتوفيق ان شاء الله
اخى DreamNet تعبتك معايا استحملنى الأسئله جايه كتير
اريد ان الغى حدث الماوس واريد ان اخفى مؤشر الماوس
غدا إن شاء الله كم كبير من الأسئله

إخفاء الماوس شئ بسيط اضف هذا السطر في فئة الكاميرا أو في فئة أخرى
myGame.IrrlichtDevice.CursorControl.Visible = False
أما بالنسبة لالغاء حدث الماوس
هل تريد أن تكون حركة الكاميرا بدون استعمال الماوس؟
أظن أن العملية ستكون أصعب وعملية انشاء Keymap لن تكون لها أي فائدة
هناك كاميرا ثابتة يوفرها المحرك وكاميرا من النوع الموجود في برنامج مايا
في هذه الحالة استعمل الكاميرا الثابتة وحاول برمجة أحداث الأزرار لتحريك الكاميرا وتدويرها :)
Dim cam As CameraSceneNode = myGame.SceneManager.AddCameraSceneNode(Nothing)
في معالجة الأحداث في الفئة المشتقة من الفئة Game تقوم بقراءة موقع الكاميرا واحداثيات الدوران وتخزنهم في متغييرين
ثم بعد الضغط على ازرار معينة تضيف بالزيادة أو النقصان قيم جديدة لموقع ودوران الكاميرا وفي الأخير تسند القيم الجديدة لتحديد الموقع الجديد للكاميرا
في الدرس الأول المتعلق بالمحرك تكلمت عن طريقة تحريك صندوق في هذه المشاركة يمكنك بنفس الطريقة تحريك الكاميرا وتدويرها
السلام عليكم
اخى العزيز DreamNet لقد حملت الحجره باللإكساء :haha: :D
بالبحث فى امثلة المحرك وجدت الطريقه :)
اسمحلى ان اضع الكود لتعم الفائده B)
Public Sub New(ByVal myGame As Game)
MyBase.New(myGame)
Dim GameDevice As IrrlichtDevice = myGame.IrrlichtDevice
GameDevice.FileSystem.WorkingDirectory = "media"
Dim mesh As AnimatedMesh = GameDevice.SceneManager.GetMesh("ROOM.3DS")
Dim ROOMtex As Texture = GameDevice.VideoDriver.GetTexture("brick-ci.jpg")
Dim node As SceneNode = GameDevice.SceneManager.AddOctTreeSceneNode(mesh.GetMesh(0), Nothing, 0, 128)
node.SetMaterialTexture(0, ROOMtex)
node.SetMaterialFlag(MaterialFlag.Lighting, False)
End Subلقد اضفت
Dim texSydney As Texture = GameDevice.VideoDriver.GetTexture("brick-ci.jpg")
node.SetMaterialTexture(0, texSydney)
node.SetMaterialFlag(MaterialFlag.Lighting, False)ارجو ان كان هناك اختصار او تعديل للأفضل فى هذا الكود ان تخبرنى
:ty:
تم تعديل هذه المشاركة بواسطة sayedf1 في 27 ديسمبر 2007 في 12:54

السلام عليكم لقد تم تعديل الكود
وهو اضافة هذا السطر فقط
node.SetMaterialFlag(MaterialFlag.Lighting, False)
الطريقه الأولى تنفع عندما اريد تغير الإكساء داخل البرنامج
تم تعديل هذه المشاركة بواسطة sayedf1 في 27 ديسمبر 2007 في 13:59

السلام عليكم
أخ DreamNet
Newton مع المكتبة القديمةهل يمكنني إستخدام المحرك الفيزيائي
(Irrlicht 1.31)
بلغة الفيجول بيسك دوت نت
أرجو الرد السريع
يمكنك ذلك لكنك ستحتاج إلى تغليف للمكتبة نيوتن وكذلك تحتاج إلى تحويل بين احداثيات المحرك الفيزيائي والمحرك IRRLICHT
وهذه المكتبة IrrlichFramework توفر الامكانياتين مع تسهيل التعامل
المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية
جارٍ التحقق من المتواجدين…