أجهزة التخزين المؤقت باستخدام SDL، سؤال عن كيفية عمله

StackOverflow https://stackoverflow.com/questions/814326

  •  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. فقط تذكر غير معتمد هذا على جميع المنابر وتكوينات ويمكنك الحصول على شيء مختلف بدلا من ذلك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top