Skip to main content
GameDev.net gamedev.net
🔒 Locked

Multiple buttons in a menu with SDL

Started by CelticSir Oct 29, 2012 at 11:38 PM 4 replies 2.7k views
Original Post
CelticSir
CelticSir
Hey

I have been learning some SDL and have created a very basic app which has a single button which once clicked exit's the program.

But i don't know how to scale it to have multiple buttons and check which button is pressed. So i need some guidance on how i can alter my attempt to handle multiple buttons simplistically.


My current method is as follows [i cut out most of the code to just show the relevant stuff:

[source lang="cpp"]
bool handle_mouse_leftClick(int x, int y, SDL_Surface *button) {
if( ( ( mouseX > x ) && ( mouseX < x + button->w ) ) && ( ( mouseY > y ) && ( mouseY < y + button->h ) ) ) {
return true;
} else {
return false;
}
}

// beyond this line is inside my main function

//menu button
SDL_Surface *button;
button = IMG_Load("button.png");

while(!quit){
//handle events
while( SDL_PollEvent( &event ) ){
switch(event.type){
case SDL_QUIT: quit = true; break;
case SDL_MOUSEMOTION: handle_mouse_position(); break;
case SDL_MOUSEBUTTONDOWN:

if (event.button.button == SDL_BUTTON_LEFT) {
if(handle_mouse_leftClick(btnx,btny,button)){
quit = true;
}
}
break;
}
}
[/source]

The problem is im not following how i can make it work to cater for any button i make for the game menu ? Unless some kind of very long if:else statements?
ultramailman
ultramailman
How about making a class for buttons, rectangles, and points? In the button class, you can have a rectangle object that defines the area the button occupies, and the rectangle class can have functions that checks if they contain a point. So your button object can have a function that checks if it is clicked.
CelticSir
CelticSir
I'm not sure how to do that in C++ in terms of syntax. Do i put it in the same cpp file or in a header file?
superman3275
superman3275
thefollower, it seems like you don't have a firm grasp of the language and it's systems yet. I recommend reading some articles (Read this article and this one).
Once you have a firm understanding of classes, try making a button class. For the files question:
The Class Definition goes in the .cpp file. (Source File)
The Class Declaration goes in the .h file. (Header File)

Here is the basic class syntax:

class Button
{
public:

void DrawButton();
void CheckForButtonClick();
void CheckForButtonHover();


private:

Window * WindowUsedToDrawButton;

Image ButtonImage;
Sprite ButtonSprite;

Rectangle ButtonCollision;

}
CelticSir
CelticSir
Thank you for the links!
BeerNutts
BeerNutts
FYI, you probably don't need a separate Rectangle definition in your Button class. The SDl Surface (or whatever you are using to define your image) should have the x, y position as well as the height and width. So, you can just use those when checking if the mouse has clicked within the image's boundaries.
My Gamedev Journal: 2D Game Making, the Easy Way

---(Old Blog, still has good info): 2dGameMaking
-----
"No one ever posts on that message board; it's too crowded." - Yoga Berra (sorta)

Topic Locked

This topic has been locked by a moderator. New replies are not allowed.

Sign in to reply to this topic.