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

تعال نبدأ مع Irrlicht على Net

رائج
بدأه DreamNet في 23 أغسطس 2007 · 109 رد · 19,552 مشاهدة · في قسم برمجة الألعاب و الرسوميات العام
مشاركة: واتساب X فيسبوك تيليجرام
#51

أعجبني مثال للعبة منشئة على نفس المحرك (نسيت من أين حملتها)

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

post-23361-1189239691_thumb.jpg

بدأ أرفق لكم ملفات ضرورية

كما تلاحظون لدينا شكل يد تحمل سلاح في الصورة

يمكنكم استعمال الشكل باستعمال الملف المضغوط وبه الشكل المراد ولقد رأينا قبل كيف نحمل شكل من داخل ملف مضغوط (مثال QUAKE3 )

الشكل به حركة Animation يمكن تسريعها بتغيير الAnimationSpeed المشكل هنا ربط الحركة والتي تمثل اطلاق الرصاص مع الماوس

deagle.zip

وبالنسبة للمؤشر يمكنكم استعمال صورته وإضافتها داخل المشهد

crosshair.zip

طبعا يجب ربط الشكل بالكاميرا

يمكننا مناقشة كيفية تطبيق المحاكاة والمشاكل التي سنتواجهنا

#52

واجب جيد .. وصعب شوي هذه المرة :D .

ما رأيك أن نصعب المثال ونقول .. كيف يمكن اضافة أثر للرصاص على الجدران :D .

سأحاول خلال هذه الايام ان شاء الله .

logo1.png تطبيق طمأنينة ، نسخة بيتا على أندرويد

عبدالله الشمّري - Al-Shammari

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

#53

السلام عليكم

هل المحرك يستخدم

SoftwareVertexProcessing

أو

HardwareVertexProcessing

وشكرا

post-114540-1189693051_thumb.png

تم تعديل هذه المشاركة بواسطة crazy Programm2007er في 13 سبتمبر 2007 في 17:18

#54

السلام عليكم :lol:

لدي سؤال:

لدي ملف DirectX(.x) متحرك

وأريد تشغيل حركته كلما يتم نقر زر معين من لوحة المفاتيح

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

وعذرا على الأسئلة الكثيرة :(

#55

السلام عليكم ,

معلش .. معلش .. يقولون اترك الخبز لخبّازه ..

لا اعرف شيء عن لغات الدوت نت .. ولذلك واجهت صعوبة في عمل المثال بالسي شارب ,

عملت المثال بلغة السي بلس .. وقمت بتحويل جزء منه الى السي شارب . .

لكن حركة اليد مع الكاميرا غير ناعمة لا اعرف ماهو السبب + التصادم لم استخدمه . .

الكاميرا هي FPS ..

التحكم :

الاسهم + الزر الأيسر للفأرة لاطلاق الرصاص :) .

post-42837-1189884018_thumb.jpg

السي شارب :

VG_cs.zip

السي بلس + التطبيق .

VG.zip

logo1.png تطبيق طمأنينة ، نسخة بيتا على أندرويد

عبدالله الشمّري - Al-Shammari

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

#56

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

رمضان كريم وكل عام وأنتم بخير

آسف على التأخير :rolleyes:

في البداية بالنسبة للأخ crazy Programm2007er المتحمس كعادته أقول له لقد رأينا كيف نحرك جسم موجود داخل المشهد والأمر لا يختلف كثيرا عن تحريك جسم ستم تحميله من ملف ديركت اكس المهم لقد حضرت لك مثال على عجل فيه يتم تحريك الشخصية tiny

المثال مرفق هنا

Tiny_Mov.zip

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

لدي ملاحظات :

1-يمكن ربط اليد بالكاميرا ببساطة بتحديد الscene node الأب عند انشاء اليد بدل وضع null واستبداله بالكاميرا

2-بالنسبة لتحميل مشهد اليد فلا داعي لفك ضغط الملف الذي أرفقته واستعمال فقط AddZipFileArchive

3-لكي نزيد اطلاق الرصاص واقعية (ليس كليا ) نقوم بانشاء ضوء النار أمام فوهة المسدس

صورة الوميض في الملف

flash.zip

بالتوفيق للجميع دائما

تقبل الله من الصيام والقيام أجمعين

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

#57

السلام عليكم :lol:

المثال جدا ممتاز

-----------------------------------------------

ولكن تواجهني مشكلة وهي

أنني عندما أقوم بتشغيل حركة المسدس

يتم تشغيل الحركة ولكن تتكرر

والسؤال هو كيف أقوم بتشغيل حركته مرة واحدة فقط كلما يتم نقر زر الفأرة الأيسر

تم تعديل هذه المشاركة بواسطة crazy Programm2007er في 18 سبتمبر 2007 في 15:26

#58

أخي Dreamnet أنا أيضاً متابع لك ولدروسك الممتازة لا حرمك الله الأجر وأيضاً أحاول التفرَّغ لأداء الـHome work : )

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

أخوك,,

#59

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

بالنسبة لحركة المسدس وحسب ماقدمه الأخ الشمري من حل ذكي جدا (الحل موجود في كود الC++ وليس الشارب )

فقد استعمال الخاصية SetFrameLoop لتحديد مجال تشغيل

فعند الضغط على الماوس حدده بين 300 و 1200

ولايقافه قام بعمل شرط وهو عند بلوغ المشهد للحركة 1190 اي عند نهايتها تقريبا يحدد مجال التشغيل بين 0

فكرة جميلة :rolleyes:

نشرحها بالكود

أولا في حدث الضغط على الزر الأيسر للماوس نحدد مجال تشغيل المشهد

m_node.SetFrameLoop(100,1200)

وفي داخل الحلقة While نضيف الشرط

If m_node.CurrentFrame >= 1190 Then
	m_node.SetFrameLoop(0,0)
End If

أما عن الدروس فأنا محتار في الدرس الذي يجب تقديمه

المهم ربما من أسئلتكم يمكن أن نحضر درس

سأعرض ان شاء الله في هذا اليوم عن استعمال مكتبة الصوت irrKlang واذا حالفني الحظ سأتطرق الى المكتبة OpenAL

#60

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

إستعمال الصوت :

المكتبة IrrKlang إضغط على الصورة لزيارة الموقع والتحميل

irrklang_titleright.gif

المكتبة تساعدنا في تشغيل الأصوات داخل اللعبة وهي سهلة الاستعمال

مانحتاجه هو كيفية الاستعمال

أولا :

علينا مراعاة نسخ الملفات الضرورية للمكتبة إضافة إلى الملفات المضافة مثل ikpMP3.DLL الذي نحتاجه لتشغيل ملفات الMP3

من جهة نضيف مرجع ال.NET للمكتبة والموجود في الملف irrKlang.NET.dll ثم نبدأ بالعمل

Imports IrrKlang
using IrrKlang;

نحضر المحرك للتشغيل

Dim engine As ISoundEngine = New ISoundEngine
ISoundEngine engine = new ISoundEngine();

نشغل ملف بطريقتين الأولى باستعمال Play2D نحدد الملف وأيضا ما إذا كان التشغيل سيكون دوري يعني دون توقف

engine.Play2D("test.mp3", true);

والطريقة الثانية هي Play3D تشغيل صوت ثلاثي الأبعاد وهذا يهمنا كثيرا خاصة في الألعاب

engine.Play3D("out.mp3", 0,0,0, true);

باستعمال الدالة Play3D يمكن تحديد مكان تشغيل الصوت داخل البعد الثلاثي وهنا حددنا مكان تشغيل الصوت باحداثيات المبدأ (0,0,0)

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

لمحاولة تطبيق ماقلناه أدرجت مثال هنا يمكن أن نرى فيه كيفية تطبيق الصوت الثلاثي البعد

vb_irrKlang.zip

بالتوفيق للجميع

#61

أخي Dreamnet

أنا لدي بعض الأسئلة لك أعتقد أنها كفيلة لك في عمل دروس عليها ولك الثواب والأجر إن شاء الله

- عندي شكل شخصية قمت بتصميمه ببرنامج Poser وخريطة مرحلة باستخدام 3D Max9 أو غيره من المحررات , كيف أقوم بإقحام ملف 3ds داخل المحرِّك والتحكم به ؟

- بالنسبة لعمل (المراحل) هل ستكون ملفات منفصلة عن بعضها البعض يتم تحميلها بشكل منفصل بعد تحقيق هدف معين ؟ أم ماذا ؟

- هل هناك مكتبات صوتية فيها أصوات Commonly used مثل طلقات الرشاش وأصوات الطبيعة وأصوات الحيوانات وغيرها ؟ أم أن علينا إما البحث وصناعة هذه الأصوات ؟

- كيف يمكن بناء الذكاء الاصطناعي AI في اللعبة عن طريق المحرِّك ؟ هل هناك قواعد معينة أم أنها مجموعة من خوارزميات ؟

- هل هناك فرق في برمجة اللعبة بالـVB والـC Sharp ؟ أم أنها مجرد وهوم ؟

- هل صحيح أن دعم المحرِّك لـVisual Studio.net سوف ينتهي في الاصدارات القادمة ؟

بالتوفيق ,,,

تم تعديل هذه المشاركة بواسطة ابن الشريف في 19 سبتمبر 2007 في 14:59

#63

حملت مثالك أخوي" دريم " .. بالمناسبة .. سأناديك بالاخ دريم ... حتى نعرف اسمك الحقيقي :D ..

سأجرب المثال في جهازي ان شاء الله .

--

اقتراحاتي المتواضعة هي عن جزء مما قاله الاخ ابن الشريف .. نريد أمثلة لتحميل المراحل " علما ان المراحل من تطويرنا " ونعمل اكتشاف للتصادم + تفاعل مع المجسمات اللي حول اللاعب .

يعني اننا نريد ان نعمل تطبيق عملي يشمل جميع ما تعلمناه ..

واذا استطعنا .. فاننا نستخدم محرر المراحل المعروف irrEdit

http://www.ambiera.com/irredit

logo1.png تطبيق طمأنينة ، نسخة بيتا على أندرويد

عبدالله الشمّري - Al-Shammari

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

#64

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

فقط أريد أن أنبه إخواني الكرام المتتبعين للدروس هنا أنني لست محترفا في استعمال المحرك , وأنا أحاول التعلم معكم والإستفادة مما تطرحونه أيضا

أما بالنسبة لاقترحاتكم أو لأسئلتكم اذا صح التعبير

اقتباس
- عندي شكل شخصية قمت بتصميمه ببرنامج Poser وخريطة مرحلة باستخدام 3D Max9 أو غيره من المحررات , كيف أقوم بإقحام ملف 3ds داخل المحرِّك والتحكم به ؟

بنفس الطريقة التي يتم اقحام أي ملف آخر ولقد وضع الأخ الشمري مثال في احدى مشاركاته هنا مثال يحمل فيه مشهد 3ds

اقتباس
- بالنسبة لعمل (المراحل) هل ستكون ملفات منفصلة عن بعضها البعض يتم تحميلها بشكل منفصل بعد تحقيق هدف معين ؟ أم ماذا ؟

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

اقتباس
- هل هناك مكتبات صوتية فيها أصوات Commonly used مثل طلقات الرشاش وأصوات الطبيعة وأصوات الحيوانات وغيرها ؟ أم أن علينا إما البحث وصناعة هذه الأصوات ؟

لا أعلم اذا كانت هناك مكتبة مؤلفة من مختلف الاصوات لكن يمكننا الاستعانة بأصوات من برامج اخرى علما بأن مكتبة الصوت IrrKlang تدعم ملفات الصوت ogg

اقتباس
- كيف يمكن بناء الذكاء الاصطناعي AI في اللعبة عن طريق المحرِّك ؟ هل هناك قواعد معينة أم أنها مجموعة من خوارزميات ؟

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

اقتباس
- هل هناك فرق في برمجة اللعبة بالـVB والـC Sharp ؟ أم أنها مجرد وهوم ؟

لا يوجد فرق مادام نستعمل نفس المحرك

حقيقة تعبت في البداية في ترجمة أكواد من السي شارب الى الفيبي لكن الحمد لله أظنني قادر على مساعدتك في ترجمة اي مثال مكتوب بالسي شارب أعجبك ولن تجد أي فرق في تنفيذه على الvb

اقتباس
هل صحيح أن دعم المحرِّك لـVisual Studio.net سوف ينتهي في الاصدارات القادمة ؟

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

في الحقيقة أعجبني كثيرا مشروع irrlichFramework المبني على الدوت نت وكنت أود الحديث عنه وأنا الآن أفضله للتطور الذي حصل فيه لكن أردت أن لا أخرج عن اطار الموضوع

المشروع يوفر أرضية متكاملة لمستعملي المحرك باضافة مكتبة الفيزياء Newton ومكتبة الصوت OpenAL

وهناك مشروع آخر في التطور أيضا وهو IrrlichtCP

يعني في الخلاصة لا تقلق أخي

أما بالنسبة للخلاصة :

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

بالتوفيق دائما للجميع

#65

أخي دريم في انتظار باقي دروسك : )

#69

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

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

كنت قد حضرت درس حول ال GUI وأري أن الأخ crazy Programm2007er لفت انتباهي إلى شئ آخر

ولكي أسهل الأمر عليك أخي الكريم فقد ذكر الأخ الشمري برنامج irrEDIT الذي يساعدك على رسم المشاهد وتسجيلها داخل ملف irr ومن ثم يمكن تحميل المشهد المنشئ بكل بساطة باستعمال الأمر loadScene للكائن scenmanager المنشئ يعني لو انشئنا ملف اسمه terrain.irr يمكن تحميله بكتابة

smgr.LoadScene("terrain.irr")

أما بالنسبة للتصادم قالكل يجمع على أن استعمال مكتبات فيزيائية خارجية تعطي نتائج أفضل مثل مكتبة newton ومكتبة ode المشهورتين وان شاء الله سأتطرق في حديث عن المكتبتين واستعمالهما لكن بصفة مبسطة

والآن نمر إلى الدرس أو التطبيق :

سنرى اليوم إن شاء الله إستعمال الGUI والتي هي إختصار لـGraphical User Interface

وبها نستطيع إستعمال الأزرار والنوافذ أيضا والكتابة خاصة ,فالمحرك يوفر الحل لإستعمال كل هذه الأدوات داخل اللعبة

في البداية يجب احضار فضاء الأسماء الخاص لاستعمال الفئات الضرورية

Imports Irrlicht.GUI

الآن يمكنا إنشاء محيط لرسم الأدوات فالمسؤول هنا عن رسم الأدوات GUI يختلف عن المسؤول عن رسم المشهد لان طريقة الرسم ستكون مختلفة

نعرف كائن يتكفل بهذا الشئ ويحمل قيمة GUIEnvironment للdevice

Dim env As IGUIEnvironment = device.GUIEnvironment

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

لذلك نعرف متغييرين يحددان ذلك

Dim skin As IGUISkin = env.Skin
Dim font As IGUIFont = env.GetFont("C:\irrlicht-1.3.1\media\fontcourier.bmp")
skin.Font = font

نلاحظ أن الخط يحدد باستعمال صورة ,المحرك يحتوي على تطبيق يقوم باستخراج الصورة المقابلة للخط الذي نريد استعماله موجود في المجلد \tools\IrrFontTool

يمكننا تحديد لون العناصر الموجودة باستعمال الدالة SetColor للمتغير skin بتحديد الجزء الذي سيتم تغيير لونه واللون الجديد

skin.SetColor(SkinColor.E3D_FACE, New Color(255, 240, 239, 225))

بما أننا نقوم برسم أدوات فأكيد سنحتاج فقط إلى احداثيات 2D لذلك فنحن نحتاج فقط لتحديد موقع الأداة وحجمها

Dim pos As Position2D = New Position2D(200, 50)
		Dim dimen As Dimension2D = New Dimension2D(250, 40)
		env.AddButton(New Rect(pos, dimen), Nothing, 100, "Run")

لاحظو معي أننا حددنا مكان وحجم الزر وكذلك الID والنص أيضا رقم الID مهم جدا خاصة في التقاط الأحداث

لن يتم الرسم إلا بتنفيذ الأمر DrawAll للكائن env

لقد قمنا الآن برسم الأداة والمتمثلة في زر أمر يبقى علينا معرفة وقت الضغط على الأداة للاستفادة منها

كما رأينا سابقا في كيفية التعامل مع الأحداث داخل المحرك في المشاركة 26

بنفس الطريقة مع اختلاف في نوع الحدث المراقب وهو GUIEvent فمثلا لو أردنا مراقبة الضغط على زر أمر من الGUI فنضع الشرط التالي :

If e.Type = EventType.GUIEvent And e.GUIEventType = GUIEvent.BUTTON_CLICKED Then

وكما قلنا فان تحديد الID للعنصر المنشئ مهم للاتقاط الحدث الخاص به فهنا يمكن معرفة العنصر الذي تم الضغط عنه من خلال رقمه الذي يمكن قرائته من الخاصية GUIEventCaller.ID

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

مرفق كود لتطبيق الدرس

Module1.zip

بالتوفيق للجميع

#70

في غيابي عن المنتدى اغتنمت الفرصة (رغم أن الوقت ضيق) لإضافة مثال لتطبيق الOpenAL وقد قمت باستخراج فقط مكتبة الصوت من irrlichtFramework يعني أخذت فقط كود انشاء مكتبة openAl من المكتبة واستعملتها في التطبيق ونجح ,المهم الكود لنفس التطبيق باستعمال المكتبة IrrKlang الذي رأيناه سابقا لكن باستعمال OpenAL

openal_ex.zip

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

shoot.zip

بالتوفيق دائما

#71

شكرا أخي DreamNet

مثال المسدس رائع ولكن يوجد به عيب وهو عندما يطلق المسدس النار تكون حركة المسدس سريعة جدا

وأرجو أن لا أكون قد أزعجتك

#72

لا يوجد ازعاج أبدا أخي الكريم

نعم حركة المسدس سريعة لاني وضعت السرعة 3000 :rolleyes: أي AnimationSpeed = 3000

بالمناسبة فقد قرأت في موضوع على منتدى irrlicht بخصوص كيفية التأكد من ملامسة عنصر هنا

 
 Public Function TestCollision(ByVal NodeA As ISceneNode, ByVal Tpoint As Vector3D) As Boolean
Dim Cx, Cy, Cz As Boolean
Dim OBJbox As Box3D = NodeA.BoundingBox
Dim Pos As Vector3D = NodeA.Position
If (Tpoint.X > (Pos.X + OBJbox.MinEdge.X) And Tpoint.X < (Pos.X + OBJbox.MaxEdge.X)) Then Cx = True
If (Tpoint.Y > (Pos.Y + OBJbox.MinEdge.Y) And Tpoint.Y < (Pos.Y + OBJbox.MaxEdge.Y)) Then Cy = True

If (Tpoint.Z > (Pos.Z + OBJbox.MinEdge.Z) And Tpoint.Z < (Pos.Z + OBJbox.MaxEdge.Z)) Then Cz = True

If (Cx And Cy And Cz) Then Return True

End Function

بعض الأدوات المساعدة :

ShadowCaster

shadowcaster8_small.jpg

shadowcaster5_small.jpg

Irrlicht Font Maker

irrfontmaker_sm.png

Delgine 3D Tools

product_deled1.jpg

#74

السلام عليكم

تواجهني مشكلة تشعرني بالإحباط :unsure:

وهي أنني عندما أقوم بالإبتعاد عن المشهد

يظهر لون الخلفية

فما هو الحل :wacko:

أخي الكريم

#75

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

بالنسبة للبرنامج Delgine 3D Tools فهو شبيه بال 3DS

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

ومن جهة فالمشهد طبيعي يختفي عند الابتعاد عنه حاول استعمال مشهد سماء للتغلب على المشكلة

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