diff --git a/testSDL/Lesson2/-.- b/testSDL/Lesson2/-.- index 8e933d7..4f6e6f2 100755 Binary files a/testSDL/Lesson2/-.- and b/testSDL/Lesson2/-.- differ diff --git a/testSDL/Lesson2/main.cpp b/testSDL/Lesson2/main.cpp index 23ee648..fd2cab5 100644 --- a/testSDL/Lesson2/main.cpp +++ b/testSDL/Lesson2/main.cpp @@ -7,7 +7,7 @@ const int scren_height = 480; SDL_Window* win = NULL; SDL_Renderer* ren = NULL; -SDL_Texture* LoadImage(const char path[]) +SDL_Texture* LoadImage(const char* path) { SDL_Surface* loadedImage = NULL; SDL_Texture* texture = NULL; @@ -62,7 +62,7 @@ int main() int bW, bH; SDL_QueryTexture(background, NULL, NULL, &bW, &bH); - //cout << bW << " " << bH << endl; + cout << bW << " " << bH << endl; ApplySurfaces( 0, 0, background, ren); ApplySurfaces( bW, 0, background, ren); ApplySurfaces( 0, bH, background, ren); diff --git a/testSDL/lesson3/-.- b/testSDL/lesson3/-.- new file mode 100755 index 0000000..335e0d5 Binary files /dev/null and b/testSDL/lesson3/-.- differ diff --git a/testSDL/lesson3/background.bmp b/testSDL/lesson3/background.bmp new file mode 100644 index 0000000..ce9cbe7 Binary files /dev/null and b/testSDL/lesson3/background.bmp differ diff --git a/testSDL/lesson3/main.cpp b/testSDL/lesson3/main.cpp new file mode 100644 index 0000000..2ee40b1 --- /dev/null +++ b/testSDL/lesson3/main.cpp @@ -0,0 +1,161 @@ +#include +#include +#include + +SDL_Renderer* ren; + +SDL_Texture* LoadImage(const char* path) +{ + SDL_Surface* loadedImage = NULL; + SDL_Texture* texture = NULL; + loadedImage = SDL_LoadBMP(path); + if (loadedImage != 0) + { + texture = SDL_CreateTextureFromSurface(ren, loadedImage); + SDL_FreeSurface(loadedImage); + } + else + std::cout << SDL_GetError() << std::endl; + return texture; +} + +void move_UP (SDL_Renderer* ren, SDL_Texture* tex, SDL_Rect &destrect, int offset = 5) +{ + destrect.y -= offset; + SDL_RenderClear(ren); + SDL_RenderCopy(ren, tex, NULL, &destrect); +} + +void move_DOWN (SDL_Renderer* ren, SDL_Texture* tex, SDL_Rect &destrect, int offset = 5) +{ + destrect.y += offset; + SDL_RenderClear(ren); + SDL_RenderCopy(ren, tex, NULL, &destrect); +} + +void move_LEFT (SDL_Renderer* ren, SDL_Texture* tex, SDL_Rect &destrect, int offset = 5) +{ + destrect.x -= offset; + SDL_RenderClear(ren); + SDL_RenderCopy(ren, tex, NULL, &destrect); +} + +void move_RIGHT (SDL_Renderer* ren, SDL_Texture* tex, SDL_Rect &destrect, int offset = 5) +{ + destrect.x += offset; + SDL_RenderClear; + SDL_RenderCopy(ren, tex, NULL, &destrect); +} + +void render_UPDATE (SDL_Renderer* ren, SDL_Texture* tex[], SDL_Rect* destrect[], int states[]) +{ + SDL_RenderClear(ren); + if (states[0]) + SDL_RenderCopy(ren, tex[0], NULL, destrect[0]); + if (states[1]) + SDL_RenderCopy(ren, tex[1], NULL, destrect[1]); +} + +int main() +{ + SDL_DisplayMode displayMode; + if (SDL_Init(SDL_INIT_EVERYTHING) != 0) + { + std::cout << "SDL_Init Error: " << SDL_GetError() << std::endl; + return 1; + } + int request = SDL_GetDesktopDisplayMode(0,&displayMode); + SDL_Window* win = SDL_CreateWindow("Hello World!", 0, 0, 1280, 720, SDL_WINDOW_SHOWN); + if (win == nullptr) + { + std::cout << "SDL_CreateWindow Error: " << SDL_GetError() << std::endl; + return 1; + } + ren = SDL_CreateRenderer(win, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC); + if (ren == nullptr) + { + std::cout << "SDL_CreateRenderer Error: " << SDL_GetError() << std::endl; + return 1; + } + const int player_wight = 333; + const int player_height = 227; + double texture_scale = 1.0; + SDL_Rect player_rect; + player_rect.x = 0; + player_rect.y = 0; + player_rect.w = player_wight; + player_rect.h = player_height; + SDL_Rect background_rect; + background_rect.x = 0; + background_rect.y = 0; + background_rect.h = displayMode.h; + background_rect.w = displayMode.w; + SDL_Texture* player = IMG_LoadTexture(ren, "player1.png"); + SDL_Texture* background = IMG_LoadTexture(ren, "background.bmp"); + SDL_RenderClear(ren); + SDL_RenderCopy(ren, background, NULL, &background_rect); + SDL_RenderCopy(ren, player, NULL, &player_rect); + SDL_RenderPresent(ren); + int bW, bH; + SDL_QueryTexture(background, NULL, NULL, &bW, &bH); + std::cout << bW << " " << bH << std::endl; + SDL_Event event; + const Uint8 *keyboardState = SDL_GetKeyboardState(NULL); + bool quit = false; + SDL_Texture* texture_array[2] = {background, player}; + SDL_Rect* rect_array[2] = {&background_rect, &player_rect}; + int texturesState_array[2] = {1,1}; + + while (!quit) + { + while(SDL_PollEvent(&event)) + { + SDL_PumpEvents(); // обработчик событий. + + if ((keyboardState[SDL_SCANCODE_UP])||(keyboardState[SDL_SCANCODE_W])) + { + move_UP(ren, player, player_rect); + } + if ((keyboardState[SDL_SCANCODE_DOWN])||keyboardState[SDL_SCANCODE_S]) + { + move_DOWN(ren, player, player_rect); + } + if ((keyboardState[SDL_SCANCODE_LEFT])||keyboardState[SDL_SCANCODE_A]) + { + move_LEFT(ren, player, player_rect); + } + if ((keyboardState[SDL_SCANCODE_RIGHT])||keyboardState[SDL_SCANCODE_D]) + { + move_RIGHT(ren, player, player_rect); + } + if (keyboardState[SDL_SCANCODE_KP_PLUS]) + { + texture_scale += 0.2; + player_rect.w = player_wight * texture_scale; + player_rect.h = player_height * texture_scale; + } + if (keyboardState[SDL_SCANCODE_KP_MINUS]) + { + texture_scale -= 0.2; + player_rect.w = player_wight * texture_scale; + player_rect.h = player_height * texture_scale; + } + if (keyboardState[SDL_SCANCODE_ESCAPE]) + { + quit = true; + } + render_UPDATE(ren, texture_array, rect_array, texturesState_array); + if (player_rect.x <= 0) + player_rect.x = 0; + if (player_rect.y <= 0) + player_rect.y = 0; + SDL_RenderPresent(ren); + } + } + SDL_DestroyTexture(player); + SDL_DestroyTexture(background); + SDL_DestroyWindow(win); + SDL_DestroyRenderer(ren); + SDL_Quit(); + return 0; +} \ No newline at end of file diff --git a/testSDL/lesson3/player.png b/testSDL/lesson3/player.png new file mode 100644 index 0000000..a2182d3 Binary files /dev/null and b/testSDL/lesson3/player.png differ diff --git a/testSDL/lesson3/player1.png b/testSDL/lesson3/player1.png new file mode 100644 index 0000000..634fb5e Binary files /dev/null and b/testSDL/lesson3/player1.png differ diff --git a/testSDL/synopsis b/testSDL/synopsis index 416f015..0c8850a 100644 --- a/testSDL/synopsis +++ b/testSDL/synopsis @@ -18,3 +18,4 @@ SDL_DestroyRenderer |указатель на рендерер SDL_DestroyWindow |указатель на окно | - |уничтожает окно SDL_Quit() | - | - |выходил из систем SDL SDL_Delay |время в мс | - |просто некоторая задержка +