SDL (простой слой MediaDirect) пытается масштабировать мой спрайт (символ)

0

Я просто пытаюсь масштабировать (увеличивать пропорционально) свой персонаж, основываясь на весе и высоте окон. Как я могу это сделать? Я попробовал SDL_BlitScaled (newsurface, NULL, screen, NULL); но это не сработало. Мой код:

SDL_Surface* screen = SDL_GetWindowSurface(win);
SDL_Surface* mySprite = IMG_Load( SPRITE_PNG_PATH);

SDL_Rect rcSprite;
rcSprite.x = 250;
rcSprite.y = 100;

SDL_BlitSurface(mySprite, NULL, screen, &rcSprite);
Теги:
gcc
sdl
2d

1 ответ

0

Лучший способ добиться этого - иметь среднюю поверхность, ширина и высота которой - собственное разрешение игры. Затем вы визуализируете весь кадр на эту поверхность и визуализируете эту поверхность в окне с SDL_BlitScaled функции SDL_BlitScaled.

Например, если вы хотите, чтобы ваше родное разрешение было 600x400, вы бы создали поверхность 600x400, blit ваш персонаж и все остальное на этой поверхности, а затем, наконец, масштабировали blit, что поверхность к окну. Если вы измените размер окна до 1200x800, все будет выглядеть вдвое большим.

SDL_Surface* screen = SDL_GetWindowSurface(win);

// Create a surface with our native resolution
int NATIVE_WIDTH = 600;
int NATIVE_HEIGHT = 400;
SDL_Surface* frame = SDL_CreateRGBSurface(0, NATIVE_WIDTH, NATIVE_HEIGHT, 
    screen->format->BitsPerPixel, screen->format->Rmask, 
    screen->format->Gmask, screen->format->Bmask, screen->format->Amask);
assert(frameSurface);

SDL_Surface* mySprite = IMG_Load( SPRITE_PNG_PATH);

SDL_Rect rcSprite;
rcSprite.x = 250;
rcSprite.y = 100;

// Blit everything to the intermediate surface, instead of the screen.
SDL_BlitSurface(mySprite, NULL, frame, &rcSprite);

// Once we've drawn the entire frame, we blit the intermediate surface to
// the window, using BlitScaled to ensure it gets scaled to fit the window.
SDL_BlitScaled(frame, NULL, screen, NULL);
  • 0
    Коллин, спасибо большое, это работает. Я пробовал очень похоже на то, что у вас есть, но раньше не получалось. Должно быть, я что-то пропустил. У меня есть еще один вопрос, что если у вас есть несколько изображений. один из них является спрайтом, а другой - фоновым (оба являются png и загружаются с помощью IMG_Load () и отображаются с помощью SDL_BlitSurface ()). Я вызываю SDL_BlitScaled () для каждого из этих двух изображений? В настоящее время мой фон полностью черный, когда я использую ваш код для спрайта (хотя он масштабируется).
  • 0
    я понял это .. все работает. Благодарю.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню