c++ SDL problem
Hej!
Jag har ett problem med min kod. Av någon anledning hoppar den ur while loopen av en anledning som jag inte tycks finna. Tänkte fråga om ni vet hur man löser det
Vet att koden inte är särskilt objekt orienterad men syftet var inte att skriva ett helt program utan bara lite tester. I detta fallet har jag försökt göra en class som heter NewButton som skapar en knapp på skärmen beroende på vilka parametrar man skickar med.
Den hoppar alltså ur While loopen i main.cpp
För övrigt är jag extremt ny med SDL så ge mig gärna lite konstruktiv kritik om ni vill
Tack i förhand!
EDIT: Koden har nu fixats till lite. Knappen dyker upp på skärmen men när jag trycker på den händer absolut ingenting. Så nu behöver jag hjälp med detta med.
Här är main.cpp
#include <sdl.h>
#include <string>
#include "NewButton.h"
SDL_Event event;
bool running = true;
SDL_Surface * screen = SDL_SetVideoMode(800,600,32,SDL_HWSURFACE|SDL_DOUBLEBUF);
int main(int argc, char * args[]){
SDL_Surface * Image = SDL_LoadBMP("TestKnapp.BMP");
Image = SDL_DisplayFormat(Image);
NewButton Avsluta(400,300,100,50,Image,screen);
while(running){
if(SDL_PollEvent(&event)){
if(event.type == SDL_QUIT){running = false; break;}
if(event.type == SDL_KEYDOWN){
if(event.key.keysym.sym == SDLK_ESCAPE){running = false; break;}
}
if(Avsluta.CheckEvents(event)){
running = false;
break;
}
}
Avsluta.DrawToScreen();
SDL_Flip(screen);
}
return 0;
}
Här är NewButton.h
#ifndef newbutton
#define newbutton
#include <SDL.h>
#include <string>
using namespace std;
class NewButton
{
public:
NewButton(int x,int y, int w, int h,SDL_Surface * Image,SDL_Surface * screen);
void DrawToScreen();
bool CheckEvents(SDL_Event &event); //returner true om knappen tryckts ner med vänster musknapp
private:
SDL_Surface * LocalScreen;
SDL_Surface * ButtonImage;
SDL_Rect ButtonRect;
int MouseX,MouseY;
};
#endif
Här är NewButton.cpp
#include "NewButton.h"
#include <SDL.h>
#include <string>
using namespace std;
NewButton::NewButton(int x,int y, int w, int h,SDL_Surface * Image,SDL_Surface * screen):
LocalScreen(screen),
MouseX(0),
MouseY(0)
{
ButtonImage = Image;
ButtonRect.x = x;
ButtonRect.y = y;
ButtonRect.w = w;
ButtonRect.h = h;
}
void NewButton::DrawToScreen(){
SDL_BlitSurface(ButtonImage,NULL,LocalScreen,&ButtonRect);
}
bool NewButton::CheckEvents(SDL_Event &event){
if(event.type == SDL_MOUSEBUTTONDOWN){
if(event.button.button == SDL_BUTTON_LEFT){
MouseX = event.button.x;
MouseY = event.button.y;
if((MouseX > ButtonRect.x) && (MouseY > ButtonRect.y) && (MouseX < (ButtonRect.x + ButtonRect.w)) && (MouseY < (ButtonRect.y + ButtonRect.w))){
return true;
}
}
}
return false;
}
| i5 2500k | h100 | Evga 580 | Fractal Design arc | Asrock P67 Fatal1ty | Hx1050w | 24" BenQ | 16GB Vengeance Ram | Razer DeathAdder | Razer Carcharias | Razer Arctosa |