الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

إطار جيد للتعامل مع Irrlichtcp رسم صوت وفيزياء معا

رائج
بدأه DreamNet في 7 أكتوبر 2007 · 112 رد · 21,104 مشاهدة · في قسم برمجة الألعاب و الرسوميات العام
مشاركة: واتساب X فيسبوك تيليجرام
#26

المرجع ليس موجودا في هذا الملف irrlicht.dll ولكن في Irrlichtframework.dl

أما بالنسبة للموضوع الأول فالمرجع موجود في الملف Irrlicht.NET.dll

#27

أحب أن أضيف شئ مهم

الملمف Irrlicht.dll الموجود مع هذه المكتبة irrlichtframework يختلف عن الملف الموجود مع Irrlicht.NET

انسخ الملف irrlicht.dll الموجود مع هذه المكتبة واستبدله بالموجود داخل الsystem32 والذي أظنه هو الذي يحدث المشكل الأول

تم تعديل هذه المشاركة بواسطة DreamNet في 22 ديسمبر 2007 في 20:37

#28

بعدما تطرقنا للحديث عن استعمال المكتبة بشكل مبسط والهيكل العام لها ثم تطرقنا إلى المحرك الفيزيائي المدرج معها بسرعة أحببت أن أضيف وبسرعة أيضا الحديث عن الصوت وهنا تم ادراج المكتبة 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

#29

لقد عمل المثال ولكن انظر الصوره

post-45582-1198352894_thumb.jpg

163374357.gif

#30

الحمد لله المثال عمل بدون مشاكل

لكن مثال Vb_quake3_map لم يعمل سوف ابدأ الدروس من الأول كى الحق بكم

اشكرك اخى الكريم DreamNet

163374357.gif

#31

السلام عليكم

اخى العزيز DreamNet لى سؤال بأى برنامج ارسم map مثل الmap التى فى مثال Quake3

163374357.gif

#32
sayedf1 كتب:
السلام عليكم

اخى العزيز DreamNet لى سؤال بأى برنامج ارسم map مثل الmap التى فى مثال Quake3

هذا يعني أنك استطعت تشغيل مثل الquake :clapping:

في الحقيقة لست مهمتم بالDesign كثيرا لانه اختصاص صعب علي :) لكن قرأت في هذا الرابط عن أدوات مساعدة هنا

ملاحظة : أنا لم أجرب البرنامج المذكور

لذلك أطلب منك تجربته واعطائنا رأيك فيه

بالتوفيق ان شاء الله

تم تعديل هذه المشاركة بواسطة DreamNet في 24 ديسمبر 2007 في 10:08

#33

السلام عليكم

نعم لقد عمل مثال quakeلكن بالمكته ولكن المحرك الذى فى موضوعك الأول فشلت كل محاولاتى فى ان يعمل انظر الصوره يبدو ان الصور التى ارفقتها لتوضيح جعلت الصفحات تفتح ببطء سوف احزفها.

post-45582-1198516584_thumb.jpg

تم تعديل هذه المشاركة بواسطة sayedf1 في 25 ديسمبر 2007 في 07:18

163374357.gif

#34

لا بدا أنك تستعمل الملف Irrlicht.NET.dll الموجود مع ملفات Dlls الذي أرفته في المشاركة الأولى وهو مرجع IrrlichtNETCP

post-23361-1198519727_thumb.jpg

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

post-23361-1187880051.jpg

استعمل هذا الملف للمرجع وستلاحظ الفرق في الحجم أيضا Irrlicht.NET.zip

تم تعديل هذه المشاركة بواسطة DreamNet في 24 ديسمبر 2007 في 21:21

#35

تمام اخى دريم نت اشتغل اشكرك جدا

* قرات فى الموقع انه يمكن ان احمل ملف mesh *.3ds فكيف ذلك؟

* لاحظت فى مثال quke ان حدث الضغط على لوحة المفاتيح غير موجود كيف لى ان اغير وظائف المفاتيح

الأسئله كثير وانا متعجل ولا اريد ان ألغبط ترتيبك للدروس. فأنا اريد ان اعمل لعبه ومتعجل قليلا

ان كان عندك وقت ابعتلك الأسئله التى اريدها كى تساعدنى فيها وأكون شاكر جدا

تم تعديل هذه المشاركة بواسطة sayedf1 في 19 سبتمبر 2016 في 21:10

163374357.gif

#36

ادارج mesh سواء كان ملف ديركت اكس أو ملف 3ds بنفس الطريقة

بالنسبة للأحداث لقد تحدثنا عنها في الموضوع الأول وهذا الموضوع أيضا

لا بأس يمكنك ارسال الأسئلة مع تحديد المكتبة التي ستسعملها وأنا أفضل استعمال هذه المكتبة فهي سهلة مرتبة وبها امكانية استعمال الصوت والفيزياء

#37

السلام عليكم

لقد جربت هذه الطريقه ولم يشتغل المثال

وهذا هو الكود

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

163374357.gif

#38

الدالة AddZipFileArchive تعمل على الملفات المضغوطة

يعني اذا أردت كل ملفات الميديا التي تحتاجها اللعبة تضغطها في ملف وأردت استخراجها استعمل هذه الدالة ليتم التعامل مباشرة مع الملفات الموجودة داخل ملفنا المضغوط

يعني الملف backgammon.3ds ليس ملف مضغوط أكيد.

لاحظ معي هذا السطر

  Dim mesh As AnimatedMesh = GameDevice.SceneManager.GetMesh("20kdm2.bsp")

الملف ذو الامتداد BSP هو الLevel الخاص بالquake واذا فتحت الملف map-20kdm2.pk3 المضغوط باستعمال الوينرار ستجد بداخله هذا الملف يعني المشهد حملناه في هذا السطر

لذلك عليك استبدال 20kdm2.bsp بملفك الbackgammon.3ds وسيعمل المثال ان شاء الله

#39

استاذ واللهِ لكن المجسم لم يتم تحميل صور الإكساء

163374357.gif

#40

السلام عليكم

لقد نجحت فى تحميل ملف x انظر النتيجه ارفقت لك المشروع ارجو ان تقول لى هل هذه النتيجه بسبب عدم وجود إضاءه ام ماذا

أنا قاعد اليوم لهذه المكتبه :evil: :evil:

quke3.rar

163374357.gif

#41

لا أعرف كيف أنشأت ملف الديركت اكس الخاص بك والذي يمثل الحجرة لكن في العادة يكون الاكساء يتبع الملف بطريقة معينة وأظنك حولته من ال3ds إلى ملف ديركت اكس

المحرك يدعم ملفات ال3ds لكن نسيت أي اصدار بالضبط لكن كان لدي عدة أمثلة منها كيفية تحميل ملفات ال3ds للاصدارات الجديدة على irrlicht لكن القرص الصلب الذي كان فيه جل الأمثلة توقف

اضافة إلى ذلك فأنا جربت تعطيل الاضاءة لانها مفعلة افتراضيا على الmesh أو ال scenenode وبدون مصدر ضوء لا يظهر شئ

لكن المشكل في الاكساءات فهي غير مطبقة على الشكل

node.SetMaterialFlag(MaterialFlag.Lighting, False)

يمكنك استخدام بعض أداوت التصميم والتي ذكرتها في السابق ويمكنك استخدام أيضا IrrEdit لتحرير مراحل ورؤية النتيجة مباشرة ثم حفظها

كما قلت في السابق أنا ضعيف في التصميم وليس لدي أي خبرة لكن قد أفيدك في استعمال هذا المحرك :)

#42

السلام عليكم

اخى العزيز DreamNet لقد نجحت فى استخدام الأحداث ولكن فى مثال quke3 تتحرك الكاميره بالأسهم والماوس اريد ان اللغى حركة الماوس واغير مفاتيح الحركه من الأسهم الى اى مفتاح اخر

163374357.gif

#43

الأسئله كثيره :hmm:

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

:ty:

163374357.gif

#44

بالنسبة للتخصيص فقد تكلمت عليه

فقط عند انشاء فئة من 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

وبالتوفيق ان شاء الله

#45

اخى DreamNet تعبتك معايا استحملنى الأسئله جايه كتير

اريد ان الغى حدث الماوس واريد ان اخفى مؤشر الماوس

غدا إن شاء الله كم كبير من الأسئله

163374357.gif

#46

إخفاء الماوس شئ بسيط اضف هذا السطر في فئة الكاميرا أو في فئة أخرى

myGame.IrrlichtDevice.CursorControl.Visible = False

أما بالنسبة لالغاء حدث الماوس

هل تريد أن تكون حركة الكاميرا بدون استعمال الماوس؟

أظن أن العملية ستكون أصعب وعملية انشاء Keymap لن تكون لها أي فائدة

هناك كاميرا ثابتة يوفرها المحرك وكاميرا من النوع الموجود في برنامج مايا

في هذه الحالة استعمل الكاميرا الثابتة وحاول برمجة أحداث الأزرار لتحريك الكاميرا وتدويرها :)

Dim cam As CameraSceneNode = myGame.SceneManager.AddCameraSceneNode(Nothing)

في معالجة الأحداث في الفئة المشتقة من الفئة Game تقوم بقراءة موقع الكاميرا واحداثيات الدوران وتخزنهم في متغييرين

ثم بعد الضغط على ازرار معينة تضيف بالزيادة أو النقصان قيم جديدة لموقع ودوران الكاميرا وفي الأخير تسند القيم الجديدة لتحديد الموقع الجديد للكاميرا

في الدرس الأول المتعلق بالمحرك تكلمت عن طريقة تحريك صندوق في هذه المشاركة يمكنك بنفس الطريقة تحريك الكاميرا وتدويرها

#47

السلام عليكم

اخى العزيز 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

163374357.gif

#48

السلام عليكم لقد تم تعديل الكود

وهو اضافة هذا السطر فقط

node.SetMaterialFlag(MaterialFlag.Lighting, False)

الطريقه الأولى تنفع عندما اريد تغير الإكساء داخل البرنامج

تم تعديل هذه المشاركة بواسطة sayedf1 في 27 ديسمبر 2007 في 13:59

163374357.gif

#49

السلام عليكم

أخ DreamNet

Newton مع المكتبة القديمةهل يمكنني إستخدام المحرك الفيزيائي

(Irrlicht 1.31)

بلغة الفيجول بيسك دوت نت

أرجو الرد السريع

#50

يمكنك ذلك لكنك ستحتاج إلى تغليف للمكتبة نيوتن وكذلك تحتاج إلى تحويل بين احداثيات المحرك الفيزيائي والمحرك IRRLICHT

وهذه المكتبة IrrlichFramework توفر الامكانياتين مع تسهيل التعامل

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…