Как я могу переключаться между полноэкранным и оконным режимом во время работы? Я нашел функцию SDL_WM_ToggleFullScreen
, но она не работает в Windows в соответствии с документацией SDL.
Да, в документации говорится, что функция SDL_WM_ToggleFullScreen
в настоящее время работает только для X.
То, как я это делаю, выглядит так:
void SdlGraphics::setupScreenSurface() {
Uint32 flags = 0;
flags |= SDL_HWSURFACE;
flags |= SDL_DOUBLEBUF;
if(isFullScreen) {
flags |= SDL_FULLSCREEN;
}
screenSurface = boost::shared_ptr<SDL_Surface>(
SDL_SetVideoMode(width, height, depth, flags),
utility::NullDeleter()
);
}
void SdlGraphics::setFullScreen(bool fullScreen) {
if(isFullScreen != fullScreen) {
isFullScreen = fullScreen;
setupScreenSurface();
}
}
Для этих точек:
Я работаю с маленькими спрайтами, есть ли
способ отображения экрана х2 с
сканы? Я пытался увеличить его с
rotozoom но это замедляет игру
и я хотел бы избежать масштабирования моего
спрайты от руки.
Как мне покрасить поверхность (как с draw_lit_sprite
в Allegro)
Я бы почти порекомендовал использовать режим OpenGL с SDL. Это даст вам аппаратно-ускоренную свободу делать подобные вещи. rotozoom
все сделано в программном обеспечении (насколько я знаю), и поэтому оно так медленно. Это всегда будет медленно.
Еще один вариант, который вы можете использовать при рисовании спрайтов в 2x, - это нарисовать все в текстуру размером 1x, а затем после того, как все нарисовано, масштабировать эту текстуру в 2 раза. Тогда вы обрабатываете только одну поверхность, а не много маленьких снова и снова за кадр.
Что касается проблемы с курсором, похоже, вы хотите, чтобы рисовал как можно быстрее, но только обновлял вашу игру с постоянной скоростью . Таким образом, у вас будет плавная прокрутка, но игра не выйдет из-под контроля.