SDL中的核心转储在哪里?

时间:2013-07-01 22:08:58

标签: c++ sdl

就在第一行发生了 * *核心转储。

SDL_Init(SDL_INIT_EVERYTHING);
SDL_Init(SDL_INIT_VIDEO);

SDL_Surface *screen;
SDL_Surface *background;
SDL_Surface *tablero;
SDL_Surface *x;
SDL_Surface *o; 
SDL_Rect posFondo;
//SDL_Rect posPlayerX[5];
//SDL_Rect posPlayerO[5];
SDL_Event suceso;

// Definir
x = SDL_LoadBMP("players.bmp");
o = SDL_LoadBMP("players.bmp");
tablero = SDL_LoadBMP("tablero.bmp");

/* Clear bg colors */
SDL_SetColorKey(x, SDL_SRCCOLORKEY,
    SDL_MapRGB(x->format, 255, 0, 255));

SDL_SetColorKey(o, SDL_SRCCOLORKEY,
    SDL_MapRGB(o->format, 255, 0, 255));

SDL_SetColorKey(tablero, SDL_SRCCOLORKEY,
    SDL_MapRGB(tablero->format, 255, 0, 255));
/* END */

screen = SDL_SetVideoMode(600, 600, 32, SDL_HWSURFACE | SDL_DOUBLEBUF);
if (screen == NULL) { return 0; }

/* Positions */
posFondo.x = 0;
posFondo.y = 0;

while (true) {
    SDL_BlitSurface(tablero, NULL, screen, &posFondo);
    //SDL_BlitSurface

    while(SDL_PollEvent(&suceso)) {
        if (suceso.type == SDL_QUIT) {
            break; break;
        }
    } 
    SDL_Flip(screen);   
    SDL_Delay ( 5 );
}   

我找不到问题,我尝试删除一些东西并添加动态变量(新的,删除类型)和nope ......

1 个答案:

答案 0 :(得分:3)

我只在代码中看到两个错误。对于初学者,不需要两次调用SDL_Init()。当您调用SDL_Init(SDL_INIT_EVERYTHING)时,您已经在初始化视频。摆脱对SDL_Init()的第二次调用。您的代码中的第二个问题将出现在:

while(SDL_PollEvent(&suceso)){
    if(suceso.type == SDL_QUIT){
        break; break;
    }
}

当您调用第一个中断时,它会退出while循环。第二次休息从未使用过。因此,我猜你会遇到循环永远不会结束的情况。以下是我推荐给你的循环:

bool quit = false;
while (!quit) {
    SDL_BlitSurface(tablero, NULL, screen, &posFondo);
    //SDL_BlitSurface

    while(SDL_PollEvent(&suceso)) {
        if (suceso.type == SDL_QUIT) {
            quit = true;
        }
    } 
    SDL_Flip(screen);   
    SDL_Delay ( 5 );
}  

编辑:您可能还应该将SDL_Surface *'初始化为NULL。

编辑#2:除非你的tablero表面要改变,否则每帧都不需要调用SDL_BlitSurface()和SDL_Flip()。如果你使用SDL_WaitEvent()而不是SDL_PollEvents(),你可以在用户做某事时更新你的屏幕,而不是一直没有真正的理由。

相关问题