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

معالجة الأحداث في كل مرحلة

مغلق
بدأه opengl programmer في 2 مايو 2006 · 1 رد · 670 مشاهدة · في قسم برمجة الألعاب و الرسوميات العام
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

لدي المشكلة الآتية :

في لعبتي لدي أكثر من مرحلة واحدة .. حيث أن كل مرحلة لديها تابع معالجة الكيبورد مختلفة عن الأخرى بمعنى آخر :

لدي :

 class level1 {
static LRESULT CALLBACK WindowProc (HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
};

المرحلة الثانية :

class level2 {
static LRESULT CALLBACK WindowProc (HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
};

قمت بإنشاء النافذة الرئيسية بالشكل التالي :

WNDCLASSEX windowClass;            // هنا جعلت تابع معالجة الكيبورد للتابع الموجود في المرحلة الأولى 
windowClass.lpfnWndProc	= (WNDPROC)(Level1::WindowProc);
RegisterClassEx (&windowClass);	
//إنشاء النافذة و إلى آخره 
----------------------------

عند الوصول إلى نهاية المرحلة الأولى سيتم نقل المعالجة من المرحلة الأولى إلى المرحلة الثانية ..

حاولت مايلي : (جميع المحاولات صحيحة أي لا يوجد أخطاء و لكن المشكلة ظلت )

قمت بجعل متحول عام WNDCLASSEX windowClass ثم نفذت التعليمة التالية :

   windowClass.lpfnWndProc	= (WNDPROC)(Level2::WindowProc);

لم تنحل المشكلة و ظل التابع في level1 هو الذي يتولى المعالجة ...

جربت الحل الثاني :

قمت أولاً بعملية unregister للكلاس الذي قمت بإنشائه في المرحلة الأولى

UnregisterClass( );// windowClass  للكلاس

ثم انشأت داخل الكلاس level2 صف جديد :

WNDCLASSEX windowClass;            // هنا جعلت تابع معالجة الكيبورد للتابع الموجود في المرحلة الثانية  
windowClass.lpfnWndProc	= (WNDPROC)(Level2::WindowProc);
RegisterClassEx (&windowClass);

و لم ينجح الأمر ..

فهل من حل ؟؟؟

أو أني سأضطر إلى جعل تابع واحد هو الذي يعالج جميع الأحداث في المراحل ؟؟؟؟؟

و عذراً للإطالة ..

#2

بالطبع اخي استخدم تابع واحد لمعالجة الاحداث مع مرعاة استخدام الاحداث و تتابعها بهذه الالية التي تسمها Finite State Machine

#define Level_1    0
#define Level_2    1

int game_state = Level_1;

// In ur Main Loop write this code  

if ( game_state == Level_1) 
{

// process level_1 here
// if u want to change ur state to Level_2 e.g when ur Score =10;
if  ( Score == 10 )
{
game_state = Level_2;   // go to level 2
}
}
else if ( game_state == Level_2)
{
// process level_2 here


}

BEng , Electronics and communications.

Embedded systems engineer.

Graphics Programmer

عالم الكومبيوتر هو من لديه المعرفة في علوم الكومبيوتر ، الرياضيات ، هندسة الالكترونيات -احمد صالح

هذا الموضوع مغلق.

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

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

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

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

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