• Advertisement
Sign in to follow this  

Multiple buttons in a menu with SDL

This topic is 1906 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

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? Edited by thefollower

Share this post


Link to post
Share on other sites
Advertisement
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.

Share this post


Link to post
Share on other sites
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 [url="http://www.cplusplus.com/doc/tutorial/classes/"]this[/url] article and [url="http://www.cplusplus.com/doc/tutorial/classes2/"]this[/url] 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:
[CODE]
class Button
{
public:

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


private:

Window * WindowUsedToDrawButton;

Image ButtonImage;
Sprite ButtonSprite;

Rectangle ButtonCollision;

}
[/CODE]

Share this post


Link to post
Share on other sites
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.

Share this post


Link to post
Share on other sites
Sign in to follow this  

  • Advertisement