003
03.07.2008, 13:04 Uhr
Suba Esel
|
@CppProgrammer: Danke, das ist genau das, was ich gesucht hatte. @Kronos: Sorry, dich hab ich irgendwie nicht ganz verstanden. Meinst du das so, dass man dann für jeden "Typ" Button eine eigene Klasse erstellst? Dann ist das IMHO genauso umständlich wie das, was ich jetzt habe.
Nochmal zur Verdeutlichung, was ich meine:
menu.hpp:
C++: |
class Menu : public Work { public: Menu(); virtual void Step(); virtual void Draw(); private: class ButtonInfo { public: ButtonInfo(std::string, std::string, int, int); bool IsClicked(); void Draw(); private: std::string texture_, mouseover_; int height_, width_, posX_, posY_; bool clicked; }; std::vector<ButtonInfo> ButtonInformation; };
|
menu.cpp:
C++: |
Menu::Menu() { ButtonInformation.push_back("spiel_starten.PNG", "spiel_starten_mouseover.PNG", 512, 0); ButtonInformation.push_back(ButtonInfo("spiel_beenden.PNG", "spiel_beenden_mouseover.PNG", 512, 768 - jngl::Height("spiel_beenden.PNG"))); }
void Menu::Step() { // so, diese Stelle meine ich - das ist so etwas blöde. if(ButtonInformation[0].IsClicked()) { Procedure::Handle().SetWork(boost::shared_ptr<Game>(new Game)); }
if(ButtonInformation[1].IsClicked()) { jngl::Quit(); } }
void Menu::Draw() { for(int i = 0; i < ButtonInformation.size(); ++i) { ButtonInformation[i].Draw(); } }
bool Menu::ButtonInfo::IsClicked() { return clicked; }
void Menu::ButtonInfo::Draw() { clicked = jngl::Button(texture_, posX_, posY_, mouseover_); }
Menu::ButtonInfo::ButtonInfo(std::string texture, std::string mouseover, int posX, int posY) : texture_(texture), mouseover_(mouseover), posX_(posX), posY_(posY) { height_ = jngl::Height(texture_); width_ = jngl::Width(texture_); clicked = false; }
|
jngl ist eine OpenGl-Graphiklibrary von nem Freund von mir, jngl::Button zeichnet den Button und gibt gleichzeitig zurück, ob er geklickt wird.
EDIT: Die verlinkte Version ist nicht die ganz aktuelle, diese findet sich hier. -- Simon Dieser Post wurde am 03.07.2008 um 13:09 Uhr von Suba Esel editiert. |