имеется:
void cGame::mainLoop () {
bool done = false;
while (!done) {
SDL_Event event;
while (SDL_PollEvent (&event)) {
switch (event.type) {
case SDL_QUIT:
done = true;
break;
case SDL_KEYDOWN:
if (event.key.keysym.sym == SDLK_ESCAPE) {
done = true;
}
break;
default:
break;
} // end switch (event.type)
} // end while (SDL_PollEvent (&event))
SDL_FillRect (gArc::screen, 0, SDL_MapRGB (gArc::screen->format, 255, 255, 255));
// Здесь gArc::screen != 0
m_ship->draw ();
// и здесь gArc::screen != 0 тоже
SDL_Flip (gArc::screen);
} // end while (!done)
}
где
void cSpaceShip::draw () {
if (SDL_BlitSurface (m_sprite, &m_srcrect, gArc::screen, &m_dstrect) != 0) {
std::cerr << "screen: " << gArc::screen << " sprite: " << m_sprite << std::endl;
//throw gArc::g_exception (SDL_GetError ());
}
}
Внутри метода draw() gArc::screen аномально равен 0.
namespace gArc {
// Указатель на поверхность экрана.
static SDL_Surface *screen;
}