Search code examples
c++sdl-2lag

Very laggy program


I was tying to write my first SDL2 program, I wanted to make movement possible, but it is very laggy

#include <iostream>
#include <SDL2/SDL.h>
#include <conio.h>

SDL_Window* window = SDL_CreateWindow("Dominiks window", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 1024, 768, SDL_WINDOW_SHOWN);
SDL_Renderer* renderer = SDL_CreateSoftwareRenderer(SDL_GetWindowSurface(window));
SDL_Event event;
bool programrunning = true;
int posX = 0;
int posY = 0;
int directionX = 0;
int directionY = 0;
char ch;

void updateScreen(){
    while(programrunning){
        SDL_WaitEvent(&event);
        if(event.type == SDL_QUIT){
            programrunning = false;
        }
        SDL_SetRenderDrawColor(renderer,0,0,0,255);
        SDL_RenderClear(renderer);
        SDL_SetRenderDrawColor(renderer,255,0,0,255);
        SDL_RenderDrawPoint(renderer, posX, posY);
        SDL_UpdateWindowSurface(window);

        if(kbhit()){
            ch = _getch();
            switch(ch){
                case 'W':
                case 'w':
                    directionY = -1;
                    directionX = 0;
                    break;
                case 'A':
                case 'a':
                    directionX = -1;
                    directionY = 0;
                    break;
                case 'S':
                case 's':
                    directionY = 1;
                    directionX = 0;
                    break;
                case 'D':
                case 'd':
                    directionX = 1;
                    directionY = 0;
                    break;
                }
            std::cin.sync();
        }
        std::cout << posX << " " << posY << std::endl;

        posX += directionX;
        posY += directionY;
    }
}

int main(int argc, char **argv){
    SDL_Init(SDL_INIT_EVERYTHING);
    updateScreen();
    return 0;
}

I have 2 questions: How do I make it less laggy? How do I make movement work while I'm not in the console?

I have tried writing less code into the loop, but it still remained laggy


Solution

  • Thanks everyone, the program now works fine, I just had to usd SDL_KEYDOWN instead of kbhit() and SDL_PollEvent(&event) instead of SDL_WaitEvent(&event)