Multiple buttons in a menu with SDL

Started by
4 comments, last by BeerNutts 11 years, 5 months ago
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?
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.
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?
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;

}

I'm a game programmer and computer science ninja !

Here's my 2D RPG-Ish Platformer Programmed in Python + Pygame, with a Custom Level Editor and Rendering System!

Here's my Custom IDE / Debugger Programmed in Pure Python and Designed from the Ground Up for Programming Education!

Want to ask about Python, Flask, wxPython, Pygame, C++, HTML5, CSS3, Javascript, jQuery, C++, Vimscript, SFML 1.6 / 2.0, or anything else? Recruiting for a game development team and need a passionate programmer? Just want to talk about programming? Email me here:

hobohm.business@gmail.com

or Personal-Message me on here !

Thank you for the links! :)
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)

This topic is closed to new replies.

Advertisement