Hey guys. I'm new to SDL and C++ and I've stumbled upon a problem here. Here's the code:
#include <SDL/SDL.h>
#include <SDL/SDL_ttf.h>
#include <SDL/SDL_image.h>
#include <string>
using namespace std;
const int screenheight = 1920;
const int screenwidth = 1080;
const int screenbpp = 32;
int right,down = 0;
SDL_Surface *bakgrund = NULL;
SDL_Surface *screen = NULL;
SDL_Surface *gubbe1 = NULL;
const int gubbheight = 5;
const int gubbwidth = 5;
SDL_Event event;
SDL_Surface *load_image(string filename)
{
SDL_Surface* bild = NULL;
bild = IMG_Load(filename.c_str());
return bild;
}
bool loadstuff()
{
bakgrund = load_image("bakgrund2.png");
gubbe1 = load_image("gubbe.png");
return true;
}
void tabort()
{
SDL_FreeSurface(bakgrund);
SDL_QUIT;
}
bool init()
{
SDL_Init(SDL_INIT_EVERYTHING);
screen = SDL_SetVideoMode(screenheight,screenwidth,screenbpp,SDL_SWSURFACE);
SDL_WM_SetCaption( "eyy",NULL);
return true;
}
SDL_Surface applysurface(int x, int y, SDL_Surface* source, SDL_Surface* destination)
{
SDL_Rect offset;
offset.x = x;
offset.y = y;
SDL_BlitSurface(source,NULL,destination,&offset);
}
class gubbe
{
private:
int x,y;
int xVel,yVel;
public:
gubbe();
void handle_input();
void move();
void show();
};
gubbe::gubbe()
{
x = 0;
y = 0;
xVel = 0;
yVel = 0;
}
void gubbe::handle_input()
{
if( event.type == SDL_KEYDOWN )
{
switch( event.key.keysym.sym )
{
case SDLK_UP: yVel -= 2; break;
case SDLK_DOWN: yVel += 2; break;
case SDLK_LEFT: xVel -= 2; break;
case SDLK_RIGHT: xVel += 2; break;
}
}
else if( event.type == SDL_KEYUP )
{
switch( event.key.keysym.sym )
{
case SDLK_UP: yVel += 2; break;
case SDLK_DOWN: yVel -= 2; break;
case SDLK_LEFT: xVel += 2; break;
case SDLK_RIGHT: xVel -= 2; break;
}
}
}
void gubbe::move()
{
x += xVel;
y += yVel;
}
void gubbe::show()
{
applysurface(x, y, gubbe1, screen);
}
int main(int argc, char*args[])
{
gubbe mingubbe;
init();
loadstuff();
bool spela = true;
while (spela)
{
while( SDL_PollEvent( &event ) )
{
mingubbe.handle_input();
if( event.type == SDL_QUIT )
{
spela = false;
}
mingubbe.move();
applysurface(0,0,bakgrund,screen);
mingubbe.show();
SDL_Flip(screen);
}
}
void tabort();
return 0;
}
Some of the stuff are in swedish but you'll probably understand. It's basically supposed to be a thing that moves around the screen when you push the arrow keys. The only problem is that it only moves if I move my mouse and push the keys stimultaneously. If I don't move the mouse around i can't hold the arrow keys down, only click(spam) them.
Any help appreciated. :)