أجهزة التخزين المؤقت باستخدام SDL، سؤال عن كيفية عمله
-
03-07-2019 - |
سؤال
وأنا اتخاذ قرار للقيام أول مباراة لي، ه يذهب أن تكون بسيطة ولكن أريد أن استخدام ج ++ واخترت SDL للتعلم بلدي. لذا سؤالي هو حول كيفية التعامل مع "مخازن" عند كتابة التعليمات البرمجية. أنا ما بعد قانون بلدي ذات الصلة في الأسفل.
وطيب، وذلك أساسا الطريق وأنا أفهم ذلك هو أن SDL يعتني الذي هو في الواقع الانجرار عازلة على الشاشة. عندما أكتب إليكم لمنطقة عازلة هو دائما backbuffer وأنا أكتب، أو المخزن المؤقت حاليا لا يتم رسمها على الشاشة. لذلك، عندما أدعو SDL_Flip (الشاشة) أنه "blits" بلادي سطح الشاشة على backbuffer، ثم ينتقل المؤشر الذي عازلة يتم الانتباه إلى هذا المخزن الذي كان ليكون backbuffer، أنا واحد كان يعمل على و عازلة القديم الذي كان يظهر الآن يصبح backbuffer. عند هذه النقطة إذا أدعو SDL_FillRect (الحجج) أنه سوف يتم تنفيذها في المنطقة العازلة الآن مرة أخرى؟
وانا ذاهب الى الرد على كياني كله "نبض القلب" من لعبي التعلم لأنها قد تساعد على توضيح سؤالي:
//While the user hasn't quit
while( quit == false )
{
//If there's an event to handle
if( SDL_PollEvent( &event ) )
{
//If a key was pressed
if( event.type == SDL_KEYDOWN )
{
//Set the proper message surface
switch( event.key.keysym.sym )
{
case SDLK_UP: message = upMessage; break;
case SDLK_DOWN: message = downMessage; break;
case SDLK_LEFT: message = leftMessage; break;
case SDLK_RIGHT: message = rightMessage; break;
}
}
else if( event.type == SDL_QUIT ) //if the user clicks the little X in the upper right corner.
{
quit = true;
}
}
//If a message needs to be displayed
if( message != NULL )
{
// Clear the back buffer.
SDL_FillRect( SDL_GetVideoSurface(), NULL, 0 );
//Draw the backgroudn to the back buffer.
apply_surface( 0, 0, background, screen );
// Draw the "message" to the back buffer.
apply_surface( ( SCREEN_WIDTH - message->w ) / 2, ( SCREEN_HEIGHT - message->h ) / 2, message, screen );
//Null the surface pointer
message = NULL;
}
//Swap the current and back buffer.
if( SDL_Flip( screen ) == -1 )
{
return 1;
}
}
المحلول
وذلك يعتمد بشكل كبير على النظام الخاص بك (أي X11، لينكس إطار العازلة، ويندوز) يستخدم، وSDL الخلفية للتفاعل معها. أيضا التي الأعلام لك PASSS إلى SDL_SetVideoMode. وهناك أساسا الأسطح البرمجيات التي تجلس في المنطقة من الذاكرة في برنامجك والأجهزة الأسطح التي يتم وضعها في ذاكرة بطاقة رسومية ل. ما تصفون يبدو لي أن تكون منطقة عازلة مزدوج، التي يتم تمكين إذا كنت تمر SDL_HWSURFACE | SDL_DOUBLEBUF إلى SDL. فقط تذكر غير معتمد هذا على جميع المنابر وتكوينات ويمكنك الحصول على شيء مختلف بدلا من ذلك.