Pull to refresh

Уроки по SDL 2: Урок 11 Текст и Вращение

Reading time2 min
Views3.4K

в этом уроке мы научимся крутить текстуры, и отображать надписи.

код:

#include<SDL2/SDL.h>
#include<SDL2/SDL_image.h>
#include<SDL2/SDL_ttf.h>

int main(void)
{
  SDL_Init(SDL_INIT_VIDEO);
  TTF_Init();
  SDL_Window* window = SDL_CreateWindow("flip", SDL_WINDOWPOS_UNDEFINED,SDL_WINDOWPOS_UNDEFINED,640,490,SDL_WINDOW_SHOWN);
  SDL_Renderer* gRenderer = SDL_CreateRenderer(window,-1,SDL_RENDERER_ACCELERATED);
  SDL_Surface* image = SDL_LoadBMP("hw.bmp");
  
  SDL_Texture* groundTexture = SDL_CreateTextureFromSurface(gRenderer,image);
  SDL_RenderCopy(gRenderer,groundTexture,NULL,NULL);

добавляем новую библиотеку SDL2_ttf, для поддержки шрифтов. Стандартно инициализируем видео, подгружаем окно, переменную отображения, а так же подгружаем фон

 SDL_Rect flowerPosition = {260,370,130,130};
 SDL_Surface* flowers =IMG_Load("flower2.png");
 
 SDL_Texture* flowerTexture = SDL_CreateTextureFromSurface(gRenderer,flowers);
 SDL_RendererFlip flip = SDL_FLIP_HORIZONTAL; //начальная позиция

Задаем позицию цветка на фоне(flowerPosition), подгружаем изображение цветка(flowers), задаем начальную позицию(flip) кручения

  for(int a = 0; a<360;a++)
  {
  
  SDL_RenderCopy(gRenderer,groundTexture,NULL,NULL);
  
  SDL_RenderCopyEx( gRenderer,flowerTexture,NULL,&flowerPosition,a,NULL,flip);
  SDL_RenderPresent(gRenderer);
  SDL_Delay(25);
  }

создаем цикл, который будет разворачивать изображение цветка на 360 градусов. в цикле сначала задаем фон, потом Важно:
SDL_RenderCopyEx(gRenderer, Изображение, прямоугольник внутри изображения, позиция изображения на фоне, угол разворота, точка разворота изображения(по умолчанию центр), flip); ,
после этого отображаем наше повернутое изображение с фоном.

  SDL_Color textColor = {255,0,0};
  
  char * newText = "finish him";
  TTF_Font* rFont = TTF_OpenFont("v_CCPrimalScream_v2.01.ttf",52);
  
  SDL_Surface* textSurface = TTF_RenderText_Solid(rFont, newText, textColor);
  
  SDL_Rect abcPosition = {210,0,textSurface->w,textSurface->h};

  SDL_Texture* mTexture =  SDL_CreateTextureFromSurface(gRenderer,textSurface);
  SDL_RenderCopy(gRenderer,mTexture,NULL,&abcPosition);
  
  TTF_Font* bFont = TTF_OpenFont("v_CCPrimalScream_v2.01.ttf",50);
  textSurface = TTF_RenderText_Solid(bFont, newText, textColor);
  
   textColor.r = 0 ; //изменяем цвет на черный.
   abcPosition.w = textSurface->w;
   abcPosition.h = textSurface->h;

   textSurface = TTF_RenderText_Solid(bFont, newText, textColor);
   mTexture =  SDL_CreateTextureFromSurface(gRenderer,textSurface);
  
  SDL_RenderCopy(gRenderer,mTexture,NULL,&abcPosition);
  SDL_RenderPresent(gRenderer);
  SDL_Delay(4000);

устанавливаем цвет(textColor) красный, создаем надпись(newText), подключаем шрифт(rFont), задаем позицию шрифта(abcPosition), и отображаем, делаем тоже самое для черного текста(bFont) и выводим на экран(RenderPresent);

  //TODO заставить изображение крутиться
  SDL_DestroyWindow(window);
  TTF_Quit();
  IMG_Quit();
  SDL_Quit();
}

Ссылка на файлы

Tags:
Hubs:
Total votes 4: ↑4 and ↓0+4
Comments0

Articles