سؤال

وكما ذكرت في هذا السؤال ، أستخدمه SDL لعبة صغيرة أنا النامية. الآن أواجه مشاكل مع SDL_DisplayFormatAlpha. واني اسعى الى خلق السطح مع قناة ألفا من صورة PNG. كان يعمل من قبل، لكن الآن بعد أن فعلت بعض إعادة بيع ديون طفيف شيء حصل كسر. لقد ضاقت عليه لهذا المنشئ:


Surface::Surface( tfilename file ) {
    // initialize the surface data member to the image indicated by filename
    SDL_Surface *tempSurface;
    tempSurface = IMG_Load( file.c_str() );
    if ( !tempSurface ) {
        surface = NULL;
        exit(1);
    }
    else {
        surface = SDL_DisplayFormatAlpha( tempSurface );
        //surface = tempSurface;
    }
    SDL_FreeSurface( tempSurface );
}

وهذا يجمع ما يرام، ولكن عندما تشغيله أحصل على خطأ الإنقسام. الخطأ التي أبلغ عنها جدب:

Program received signal SIGSEGV, Segmentation fault.
[Switching to Thread 0xb79c16c0 (LWP 8089)]
0xb7e8b9a3 in SDL_DisplayFormatAlpha () from /usr/lib/libSDL-1.2.so.0

وتتبع المكدس هو كما يلي:

#0  0xb7e8b9a3 in SDL_DisplayFormatAlpha () from /usr/lib/libSDL-1.2.so.0
#1  0x0804987e in Surface (this=0x804d060, file=@0xbfb20760) at Surface.cpp:16
#2  0x0804a159 in Image (this=0x804d038, x=0, y=0, file=@0xbfb207a0)
    at Image.cpp:16
#3  0x0804a3de in Object (this=0x804d028, imageFile=@0xbfb207dc)
    at Object.cpp:4
#4  0x080491cb in Application (this=0xbfb20810) at Application.cpp:8
#5  0x08048e0d in main () at main.cpp:5

إذا كنت التعليق خارج surface = SDL_DisplayFormatAlpha( tempSurface ); وSDL_FreeSurface( tempSurface ); وsurface = tempSurface; غير تعليق مثل ذلك:



Surface::Surface( tfilename file ) {
    // initialize the surface data member to the image indicated by filename
    SDL_Surface *tempSurface;
    tempSurface = IMG_Load( file.c_str() );
    if ( !tempSurface ) {
        surface = NULL;
        exit(1);
    }
    else {
        //surface = SDL_DisplayFormatAlpha( tempSurface );
        surface = tempSurface;
    }
    //SDL_FreeSurface( tempSurface );
}

وبعد ذلك يبدو أن تعمل على ما يرام. يمكن لأحد أن يقول لي ما الذي يحدث؟ في الواقع، يبدو أن الشفافية في العمل، وأيضا عندما كنت التعليق خارج SDL_DisplayFormatAlpha. غير أن وظيفة يعني فقط ليتم استخدامها مع الصور التي لم يكن لديك قناة ألفا؟

هل كانت مفيدة؟

المحلول

وIMG_Load يجب التعامل بالشفافية وPNG تلقائيا، كما في نهاية الملاحظات مشاركتك. ما عدا / الخطأ الفعلي التي القيت؟ كومة التتبع الخاص بك لا تظهر ذلك.

نصائح أخرى

إذا كنت تقرأ الرابط هنا (وظيفة ذات الصلة):

SDL_DisplayFormat

و"يجب أن ندعو SDL_Init قبل استخدام وظيفة SDL_DisplayFormat. إذا لم تقم بذلك، سوف برنامجك تحطم مع حدوث انتهاك وصول".

ويمكن أن تكون مشكلتك؟

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