Приступим к созданию приложения.
Прежде всего установите (если до сих пор этого не сделали) SDL.
В Fedora это делается так:
yum install SDL-devel
Приступим.
Подключим заголовочные файлы и оприделим параметры окна в константах.
#include <SDL/SDL.h>
const int WINDOW_WIDTH = 640;
const int WINDOW_HEIGHT = 480;
const char* WINDOW_TITLE = «SDL HOWTO»;
Теперь начнём формировать main:
int main(int argc, char **argv){
Инициализируем библиотеку и указываем программе параметры необходимого окна:
SDL_Init( SDL_INIT_VIDEO );
SDL_Surface* screen = SDL_SetVideoMode( WINDOW_WIDTH,
WINDOW_HEIGHT, 0,
SDL_HWSURFACE | SDL_DOUBLEBUF );
SDL_WM_SetCaption( WINDOW_TITLE, 0 );
Загружаем спрайт и указываем прозрачный цвет для него:
SDL_Surface* bitmap = SDL_LoadBMP(«sprite.bmp»);
SDL_SetColorKey( bitmap, SDL_SRCCOLORKEY, SDL_MapRGB(bitmap->format,0, 0, 0) );
Задаём часть рисунка, которая будет отрисована на экране:
SDL_Rect source;
source.x = 0;
source.y = 0;
source.w = 120;
source.h = 120;
И начинаем формировать цикл ожидания событий:
SDL_Event event;
bool run = true;
while(run) {
while ( SDL_PollEvent(&event) ) {
switch (event.type) {
Укажем что будем улавливать движения мыши:
case SDL_MOUSEMOTION:
При каждом движении будем передвигать спрайт на новую позицию, но перед этим очистим экран от «старых зарисовок»:
SDL_Rect fill;
fill.x = 0;
fill.y = 0;
fill.w = WINDOW_WIDTH;
fill.h = WINDOW_HEIGHT;
SDL_FillRect(screen,&fill,SDL_MapRGB(bitmap->format,0, 0, 0) );
Рисуем спрайт на новом месте:
SDL_Rect destination;
destination.x = event.motion.x — 60; //отнимаем половину ширины картинки от позиции мыши
destination.y = event.motion.y — 60; //высоты
destination.w = 120;
destination.h = 120;
SDL_BlitSurface(bitmap, &source, screen, &destination);
SDL_Flip(screen);
Выводим в консоль сообщение о текущем положении указателя:
printf(«Передвинулся с %d,%d в (%d,%d)\n», event.motion.xrel, event.motion.yrel,event.motion.x, event.motion.y);
Указываем что будем выходить из цыкла при нажатии кнопки закрытия окна:
case SDL_QUIT:
run = false;
Закрываем оставшиеся скобки чистим экран и выходим из программы:
}
}
}
SDL_FreeSurface(bitmap);
SDL_Quit();
return 0;
}
Теперь компилируем. В линуксах так:
g++ mouse.cpp -o mouse -lSDL
При передвижении мыши спрайт должен двигаться вместе с указателем:
Пример качаем тут
ps справедливости ради должен отметить, что «передвинулся с» означает не «передвинулся с позиции:», а передвинулся с «ходом» этаким dx и dy..