就在第一行发生了 * *核心转储。
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 ......
答案 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(),你可以在用户做某事时更新你的屏幕,而不是一直没有真正的理由。