السلام عليكم ورحمة الله وبركاته
crazy Programm2007er هل أنت مستعجل :lol:
في البدأ كما وعدتكم المرة السابقة اليوم سنتحدث عن الأحداث وحتى لا يعاتبني أحد الأكواد بالفيبي والسي شارب معا :rolleyes:
وقبل أم أبدأ كنت قد تكلمت عن كيفية إنشاء قالب لمشاريعنا وأردت إضافة القالب هنا الملف المرفق هنا يتم وضعه مباشرة كماهو في مجلد templates تحت projectitem
بالنسبة لتطبيق اليوم نبدأ على بركة الله
لو فتحنا على المرجع Irrlicht.NET لاستعراض الفئات التي يحويها سنجد أنه يوفر لنا interface إسمه IeventReceiver يحوي على الحدث OnEvent لإدارة كافة الأحداث من داخل المحرك
لادراج هذا الحدث علينا عمل إشتقاق للكائن IeventReceiver المذكور فقط ويجب المحافظة على كتابة الحدث داخل الكلاس الذي سننشئ بنفس الطريقة التي عرف بها في المحرك
كما هو مبين في الصورة فالحدث من النوع boolean واسمه onevent
أول خطوة نضيف كلاس ولنسميها MyEventReceiver مثلا
Public Class MyEventReceiver Implements IEventReceiver Function OnEvent(ByVal e As [Event]) As Boolean Implements IEventReceiver.OnEvent End Function End Class
e يعبر عن الحدث الذي سنقوم بمراقبته ويمكننا التفريق بين الأحداث عن طريق نوع الحدث e.Type وهو يتضمن أربعة أنواع منها النوع الذي يهمنا الآن وهو EventType.KeyInput الذي يمثل حدث الضغط على لوحة المفاتيح
كما أن المحرك يسهل لنا الوصول مباشرة إلى إسم المفتاح المضغوط عن طريق قراءة القيمة e.Key
الآن بعدما رأينا تقريبا كيفية الوصول إلى الأحداث نحاول الاستفادة منها لتحريك عنصر داخل المشهد
نرجع إلى المثال السابق ونحاول تحريك المكعب
طبعا لكل scenenode خاصية إسمها position نحدد فيها موقع الnode على المحاور الثلاثة وإذا أردنا تحريكه يجب تغيير موقعه طبعا لذلك نحاول تغيير هذه الخاصية عند الضغط على الأسهم طبعا نغير فقط الاحداثيات x و z فقط
لذلك نضيف الكود التالي إلى الحدث
'vb code Public Class MyEventReceiver Implements IEventReceiver Function OnEvent(ByVal e As [Event]) As Boolean Implements IEventReceiver.OnEvent If e.Type = EventType.KeyInput Then 'قراءة الموقع الحالي للمكعب Dim v As Vector3D = Module1.box.Position Select Case e.Key Case KeyCode.KEY_LEFT 'مفتاح السهم لليسار v.X -= 2 Case KeyCode.KEY_RIGHT 'مفتاح السهم لليمين v.X += 2 Case KeyCode.KEY_UP 'مفتاح سهم للأسفل v.Z += 2 Case KeyCode.KEY_DOWN 'مفتاح سهم للأعلى v.Z -= 2 End Select 'تحديث موقع المكعب Module1.box.Position = v Return True End If Return False End Function End Class
//C# code
class myEventReveiver:IEventReceiver
{
public bool OnEvent(Event p_e)
{
if (p_e.Type == EventType.KeyInput)
{
Vector3D v =Program.box.Position;
switch (p_e.Key)
{
case KeyCode.KEY_LEFT:
v.X -= 2;
break;
case KeyCode.KEY_RIGHT :
v.X += 2;
break;
case KeyCode.KEY_UP:
v.Z += 2;
break;
case KeyCode.KEY_DOWN:
v.Z -= 2;
break;
case KeyCode.KEY_ESCAPE:
Program.device.CloseDevice();
break;
}
Program.box.Position = v;
return true;
}
return false;
}
}الآن نقوم بربط أحداث المحرك بالكلاس المنشئة
'vb code Dim receiver As New MyEventReceiver device.EventReceiver = receiver //C# code IEventReceiver receiver= new myEventReveiver(); device.EventReceiver = receiver;
إضافة :
بماأننا نتكلم على الأحداث نضيف حدث لإغلاق التطبيق عند الضغط على المفتاح escape (KeyCode.KEY_ESCAPE) لذلك نضيف السطر
device.CloseDevice()
مرفق الكود للتطبيق بالvb و C#
بالتوفيق للجميع
المرة القادمة إن شاء الله سنتحدث عن التصادم لكن ليس بالشكل الفيزيائي
تم تعديل هذه المشاركة بواسطة DreamNet في 31 أغسطس 2007 في 17:32


