Welcome to collectivesolver - Programming & Software Q&A with code examples. A website with trusted programming answers. All programs are tested and work.

Contact: aviboots(AT)netvision.net.il

Buy a domain name - Register cheap domain names from $0.99 - Namecheap

Scalable Hosting That Grows With You

Secure & Reliable Web Hosting, Free Domain, Free SSL, 1-Click WordPress Install, Expert 24/7 Support

Semrush - keyword research tool

Boost your online presence with premium web hosting and servers

Disclosure: My content contains affiliate links.

39,884 questions

51,810 answers

573 users

How to create a window and load image with specific size using SDL2 with class and C++

1 Answer

0 votes
// main.cpp

#include "game.h"

#define WIDTH 1200
#define HEIGHT 800

int main(int argc, char* argv[]) {
   
    Game* game = new Game();

    game->init("SDL2",
        SDL_WINDOWPOS_CENTERED,
        SDL_WINDOWPOS_CENTERED,
        WIDTH,
        HEIGHT,
        false);

    while (game->running()) {
        game->events();
        game->update();
        game->render();
    }

    game->quit();

    return 0;
}

// game.h

#pragma once

#include <iostream>

#include "SDL.h"
#include "SDL_image.h"
 
class Game {
public:
	Game();
	~Game();
	void init(const char* title, int xpos, int ypos, int width, int height, bool fullscreen);
	
	void events();
	void update();
	void render();
	void quit();

	bool running() { return isRuning; }

private:
	bool isRuning;
	SDL_Window* window = nullptr;
	SDL_Renderer* renderer = nullptr;
	SDL_Texture* texture = nullptr;
	SDL_Rect destRect;
};
// game.cpp

#include "game.h"

Game::Game()
{
}

Game::~Game()
{
}

void Game::init(const char* title, int xpos, int ypos, int width, int height, bool fullscreen)
{
    isRuning = false;

    if (SDL_Init(SDL_INIT_EVERYTHING) != 0) {
        std::cout << "SDL_Init Error: " << SDL_GetError() << '\n';
        return;
    }

    int flags = 0;
    if (fullscreen) {
        flags = SDL_WINDOW_FULLSCREEN;
    }
    
    window = SDL_CreateWindow(title, xpos, ypos, width, height, flags);
    if (window == NULL) {
        std::cout << "SDL_CreateWindow Error: " << SDL_GetError() << '\n';
        return;
    }

    renderer = SDL_CreateRenderer(window, -1, 0);
    if (renderer == NULL) {
        std::cout << "SDL_CreateRenderer Error: " << SDL_GetError() << '\n';
        return;
    }

    isRuning = true;

    SDL_Surface* image = IMG_Load("assets/11731.png");
    texture = SDL_CreateTextureFromSurface(renderer, image);
    SDL_FreeSurface(image);
}

void Game::events()
{
    SDL_Event event;
    SDL_PollEvent(&event);

    switch (event.type) {

    case SDL_QUIT:
        isRuning = false;
        break;
    }
}

void Game::update()
{
    destRect.h = 128;
    destRect.w = 128;
}

void Game::render()
{
    SDL_RenderClear(renderer);
    SDL_RenderCopy(renderer, texture, NULL, &destRect);
    SDL_RenderPresent(renderer);
}

void Game::quit()
{
    SDL_DestroyWindow(window);
    SDL_DestroyRenderer(renderer);
    SDL_Quit();

    std::cout << "Game Over" << "\n";
}

 



answered Feb 16, 2022 by avibootz

Related questions

1 answer 558 views
1 answer 204 views
1 answer 262 views
262 views asked Jan 5, 2022 by avibootz
1 answer 362 views
1 answer 262 views
...