सी ++ का उपयोग करते हुए उबंटू पर एसडीएल का उपयोग करके ओपनजीएल प्रोग्रामिंग से परिचित हो रहा है। कुछ देखने और प्रयोग करने के बाद मैं समझना शुरू कर रहा हूं। मुझे एसडीएल के साथ कीबोर्ड ईवेंट हैंडलिंग पर सलाह चाहिए।एसडीएल के साथ एक साथ कई कीप्रेस को कैसे संभालें?
मेरे पास पहला व्यक्ति कैमरा है, और एफडब्ल्यूडी, बैक, स्ट्राफ बाएं और दाएं चल सकता है और माउस का उपयोग करने के लिए बहुत अच्छा है। यहां मेरी प्रक्रिया है Ivents फ़ंक्शन:
void processEvents()
{
int mid_x = screen_width >> 1;
int mid_y = screen_height >> 1;
int mpx = event.motion.x;
int mpy = event.motion.y;
float angle_y = 0.0f;
float angle_z = 0.0f;
while(SDL_PollEvent(&event))
{
switch(event.type)
{
case SDL_KEYDOWN:
switch(event.key.keysym.sym)
{
case SDLK_ESCAPE:
quit = true;
break;
case SDLK_w:
objCamera.Move_Camera(CAMERASPEED);
break;
case SDLK_s:
objCamera.Move_Camera(-CAMERASPEED);
break;
case SDLK_d:
objCamera.Strafe_Camera(CAMERASPEED);
break;
case SDLK_a:
objCamera.Strafe_Camera(-CAMERASPEED);
break;
default:
break;
}
break;
case SDL_MOUSEMOTION:
if((mpx == mid_x) && (mpy == mid_y)) return;
SDL_WarpMouse(mid_x, mid_y);
// Get the direction from the mouse cursor, set a resonable maneuvering speed
angle_y = (float)((mid_x - mpx))/1000;
angle_z = (float)((mid_y - mpy))/1000;
// The higher the value is the faster the camera looks around.
objCamera.mView.y += angle_z * 2;
// limit the rotation around the x-axis
if((objCamera.mView.y - objCamera.mPos.y) > 8) objCamera.mView.y = objCamera.mPos.y + 8;
if((objCamera.mView.y - objCamera.mPos.y) <-8) objCamera.mView.y = objCamera.mPos.y - 8;
objCamera.Rotate_View(-angle_y);
break;
case SDL_QUIT:
quit = true;
break;
case SDL_VIDEORESIZE:
screen = SDL_SetVideoMode(event.resize.w, event.resize.h, screen_bpp, SDL_OPENGL | SDL_HWSURFACE | SDL_RESIZABLE | SDL_GL_DOUBLEBUFFER | SDL_HWPALETTE);
screen_width = event.resize.w;
screen_height = event.resize.h;
init_opengl();
std::cout << "Resized to width: " << event.resize.w << " height: " << event.resize.h << std::endl;
break;
default:
break;
}
}
}
अब यह काम करते समय, इसमें कुछ सीमाएं हैं। सबसे बड़ा और मेरे प्रश्न का उद्देश्य यह है कि ऐसा लगता है कि दबाए गए नवीनतम कुंजी को केवल संसाधित किया जाता है। तो अगर मैं पीछे की तरफ चलने के लिए 'पकड़ रहा हूं' और मैं सही तरीके से स्ट्रैफ़ करने के लिए 'डी' दबाता हूं, तो मैं सही स्ट्रैफ़िंग समाप्त करता हूं लेकिन पीछे नहीं जा रहा हूं।
क्या कोई मुझे एसडीएल के साथ बेहतर कीबोर्ड हैंडलिंग के लिए सही दिशा में इंगित कर सकता है, एकाधिक कुंजीपेशियों के लिए एक बार में समर्थन आदि?
धन्यवाद
सच एक अच्छा समाधान है, यह लगभग सभी अपने खेल में इस्तेमाल किया जा सकता – devsaw