Jump to content

  • Log In with Google      Sign In   
  • Create Account


Multiple buttons in a menu with SDL


Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.

  • You cannot reply to this topic
5 replies to this topic

#1 thefollower   Members   -  Reputation: 176

Like
0Likes
Like

Posted 29 October 2012 - 05:38 PM

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 buttonSDL_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, 29 October 2012 - 05:39 PM.


Sponsor:

#2 ultramailman   Prime Members   -  Reputation: 1561

Like
1Likes
Like

Posted 29 October 2012 - 07:35 PM

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.

#3 thefollower   Members   -  Reputation: 176

Like
0Likes
Like

Posted 29 October 2012 - 07:38 PM

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?

#4 superman3275   Crossbones+   -  Reputation: 2010

Like
1Likes
Like

Posted 29 October 2012 - 07:44 PM

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 ph34r.png!

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 smile.png!


#5 thefollower   Members   -  Reputation: 176

Like
0Likes
Like

Posted 29 October 2012 - 09:08 PM

Thank you for the links! :)

#6 BeerNutts   Crossbones+   -  Reputation: 2715

Like
1Likes
Like

Posted 30 October 2012 - 08:28 AM

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)




Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.



PARTNERS