2013-07-01 40 views
-1

刚刚在第一行发生了* *核心转储。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); 
} 

我无法找到问题,我试着删除了一些东西,添加动态变量(新建,删除类型),并都能跟得上......

+0

有恰恰是没有办法中,任何人都可以帮助你现在调试代码。您需要提供具体的错误细节。考虑在'gdb'或其他一些调试器中运行你的程序。 – Gian

+0

你为什么要调用SDL_Init两次? – crowder

回答

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:真的没有必要呼吁SDL_BlitSurface()和SDL_Flip()的每一帧,除非你的tablero表面将会改变。如果您使用SDL_WaitEvent()而不是SDL_PollEvents(),那么只要用户做了某些事情,而不是所有时间都没有真正原因,就可以更新屏幕等。